使用两个数据帧使用条件语句应用函数

时间:2016-08-29 20:18:23

标签: r function if-statement dataframe

我有两个数据框x和y。

x<-data.frame("j"=c("A","B","C"),"k"=c(1,90,14))
  x j  k
  1 A  1
  2 B 90
  3 C 14

y<-data.frame("A"=c(1,0,0,1,1),"B"=c(0,1,0,0,1),"C"=c(1,1,1,0,0))
  A B C
1 1 0 1
2 0 1 1
3 0 0 1
4 1 0 0
5 1 1 0

我需要一个带条件语句的函数,其中如果在数据集y中有0,则替换为-1或1在A列中替换为1,依此类推以获得此结果。

z<-data.frame("A"=c(1,-1,-1,1,1),"B"=c(-90,90,-90,-90,90),"C"=c(14,14,14,-14,-14))
   A   B   C
1  1 -90  14
2 -1  90  14
3 -1 -90  14
4  1 -90 -14
5  1  90 -14

1 个答案:

答案 0 :(得分:1)

这是一个基本R中有趣的单行,它使用了许多有用的功能。

setNames(do.call(data.frame, Map(function(x, y) x * c(-1, 1)[y+1], x$k, y)), LETTERS[1:3])
   A   B   C
1  1 -90  14
2 -1  90  14
3 -1 -90  14
4  1 -90 -14
5  1  90 -14

最内部函数x * c(-1, 1)[y+1]取x的值(它是标量--1,9或14)并将其乘以负-1或1,具体取决于y的值。 / p>

Map取x的x $ k值和y参数的data.frame y的变量,对每一对执行函数并返回一个列表。有三个向量。

此列表将转换为带do.call的data.frame,变量名称随setNames一起提供。