Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在引用其他多列的值时解析列?_R_Function_Loops_Dplyr - Fatal编程技术网

R 如何在引用其他多列的值时解析列?

R 如何在引用其他多列的值时解析列?,r,function,loops,dplyr,R,Function,Loops,Dplyr,我有一个示例数据框,其中列a到d是参考列,列x1-3需要解析并插入新值 以下是重新生成数据帧的代码: df1 <- data_frame(a = c(0,1,0,1), b = c(0,0,1,1), c = c(0,0,0,0), d = c(1,0,0,1), x1= c(NA, NA, NA, NA), x2= c(NA, NA, NA, NA), x3= c(NA, NA, NA, NA)) a b c d x1 x2 x3 1 0 0 1 5 NA N

我有一个示例数据框,其中列a到d是参考列,列
x1-3
需要解析并插入新值

以下是重新生成数据帧的代码:

    df1 <- data_frame(a = c(0,1,0,1), b = c(0,0,1,1), c = c(0,0,0,0), d = 
      c(1,0,0,1), x1= c(NA, NA, NA, NA), x2= c(NA, NA, NA, NA), x3= c(NA, NA, NA, NA))
  a b c d x1 x2 x3
1 0 0 1 5 NA NA NA
2 3 9 2 1 NA NA NA
3 4 2 3 5 NA NA NA
4 2 1 4 1 NA NA NA
理想情况下,
x1
x2
中的所有值都将根据其给定条件进行更改<代码>X3无论如何都应该用
1
填充。有谁能建议一种有效的方法来循环和解析这些列吗

您不需要循环:

df1$x1 <- df1$a
df1$x2 <- as.integer(df1$a & df1$b)
df1$x3 <- 1
编辑:

如果列a-d不是二进制值(0或1),仍然可以使用相同的表达式创建列x1-3。假设您有这个数据帧:

    df1 <- data_frame(a = c(0,1,0,1), b = c(0,0,1,1), c = c(0,0,0,0), d = 
      c(1,0,0,1), x1= c(NA, NA, NA, NA), x2= c(NA, NA, NA, NA), x3= c(NA, NA, NA, NA))
  a b c d x1 x2 x3
1 0 0 1 5 NA NA NA
2 3 9 2 1 NA NA NA
3 4 2 3 5 NA NA NA
4 2 1 4 1 NA NA NA
你的情况是:

x1 = 1 if (b >= 2) and (d < 4) 0 otherwise
x2 = 1 if (a > b) and (b < d) 0 otherwise
x3 = always 1

感谢您提供这个简单而优雅的解决方案。虽然这是我最初的问题,但我确实想通过想象a、b、c不是
0
1
,而是其他整数,例如
1
2
3
4
,我必须使用函数循环吗?再次感谢@EdwardLin我用你的新条件编辑了我的答案,希望有帮助:)非常感谢@CharlesMitjans,这是非常有用的,也是一个优雅的解决方案。
df1$x1 <- as.integer(df1$b >= 2 & df1$d < 4)
df1$x2 <- as.integer(df1$a > df1$b & df1$b < df1$d)
df1$x3 <- 1
  a b c d x1 x2 x3
1 0 0 1 5  0  0  1
2 3 9 2 1  1  0  1
3 4 2 3 5  0  1  1
4 2 1 4 1  0  0  1