将两个数据帧除以R中的公共行

时间:2018-12-06 18:09:02

标签: r

我有2个数据集

> df2<-data.frame(name=c("A","B","C"),F1=c(5,8,9),F2=c(3,8,9),F3=c(1,2,3))
  name F1 F2 F3
1    A  5  3  1
2    B  8  8  2
3    C  9  9  3
> df1<-data.frame(name=c("C","C","A","B"),F1=c(1,5,8,9),F2=c(1,5,8,9),F3=c(1,5,8,9))
  name F1 F2 F3
1    C  1  1  1
2    C  5  5  5
3    A  8  8  8
4    B  9  9  9

我想用通用名称(例如C / C,C / C,A / A,B / B)将df1除以df2。这只是我的数据集的一个示例,谢谢是250x50。

3 个答案:

答案 0 :(得分:2)

请注意,如果您的任何真实数据名称包含undefined reference to `curlpp::Cleanup::Cleanup()' path_service.cpp:(.text+0xf9): undefined reference to `curlpp::Easy::Easy()' path_service.cpp:(.text+0x12a): undefined reference to `curlpp::Easy::setOpt(curlpp::OptionBase*)' path_service.cpp:(.text+0x15b): undefined reference to `curlpp::Easy::setOpt(curlpp::OptionBase*)' path_service.cpp:(.text+0x18c): undefined reference to `curlpp::Easy::setOpt(curlpp::OptionBase*)' path_service.cpp:(.text+0x1d3): undefined reference to `curlpp::Easy::setOpt(curlpp::OptionBase*)' path_service.cpp:(.text+0x218): undefined reference to `curlpp::Easy::setOpt(curlpp::OptionBase*)' path_service.cpp:(.text+0x227): undefined reference to `curlpp::Easy::perform()' path_service.cpp:(.text+0x298): undefined reference to `curlpp::Easy::~Easy()' path_service.cpp:(.text+0x2a7): undefined reference to `curlpp::Cleanup::~Cleanup()' path_service.cpp:(.text+0x384): undefined reference to `curlpp::Easy::~Easy()' path_service.cpp:(.text+0x398): undefined reference to `curlpp::Cleanup::~Cleanup()' ".x",则此操作将无效。

".y"

答案 1 :(得分:2)

我们可以使用data.table的联接和除法

library(data.table)
nm1 <- names(df1)[-1]
nm2 <- paste0('i.', nm1)
setDT(df1)[df2, (nm1) := Map(`/`, mget(nm1), mget(nm2)), on = .(name)]
df1
#   name        F1        F2        F3
#1:    C 0.1111111 0.1111111 0.3333333
#2:    C 0.5555556 0.5555556 1.6666667
#3:    A 1.6000000 2.6666667 8.0000000
#4:    B 1.1250000 1.1250000 4.5000000

答案 2 :(得分:2)

这是基本的R解决方案:

ind = match(df1$name, df2$name)
data.frame("name" = df1$name, df1[,-1] / df2[ind,-1])

#   name        F1        F2        F3
# 1    C 0.1111111 0.1111111 0.3333333
# 2    C 0.5555556 0.5555556 1.6666667
# 3    A 1.6000000 2.6666667 8.0000000
# 4    B 1.1250000 1.1250000 4.5000000
相关问题