Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.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_Tidyr - Fatal编程技术网

R 如何使用多列中的响应创建新列?

R 如何使用多列中的响应创建新列?,r,tidyr,R,Tidyr,我试图根据同一行上其他列的响应在数据框中创建一个新列 我找到的大多数解决方案都是数字的,我的场景是字符。我想创建一个新的列,显示“检测到”如果该行中的任何观察结果显示“检测到”,如果没有观察结果显示“检测到”,那么我希望新列的响应为“否定”。在下面的场景中,我希望第1行(ID1)有第4列(Test4),根据“检测到的”响应显示“检测到的” ID你可以做: df$Test4 <- ifelse(rowSums(df == "Detected") > 0,

我试图根据同一行上其他列的响应在数据框中创建一个新列

我找到的大多数解决方案都是数字的,我的场景是字符。我想创建一个新的列,显示“检测到”如果该行中的任何观察结果显示“检测到”,如果没有观察结果显示“检测到”,那么我希望新列的响应为“否定”。在下面的场景中,我希望第1行(ID1)有第4列(Test4),根据“检测到的”响应显示“检测到的”

ID你可以做:

df$Test4 <- ifelse(rowSums(df == "Detected") > 0,
                   "Detected",
                   "Negative")
如果上述方法不起作用,则字符串的结构可能会有问题(例如,可能会有额外的空格或其他字符)

如果您发布一个原始的数据示例,这会有所帮助。您也可以尝试:

df$Test4 <- ifelse(
  apply(df, 1, function(x) any(grepl("^(?!.*Not).*Detected.*$", x, perl = T))),
  "Detected",
  "Negative"
)

df$Test4对于此解决方案,请重写您的df并按如下方式进行变异:

df = data.frame(ID, Test1, Test2, Test3, stringsAsFactors=F)
df <- mutate(df, Test4 = ifelse('Detected' %in% c(Test1, Test2, Test3), 'Detected', 'Negative'))

  ID        Test1        Test2        Test3    Test4
1  1     Detected     Detected Not Detected Detected
2  2 Not Detected Not Detected     Detected Detected
3  3     Detected     Detected Not Detected Detected
4  4     Detected     Detected Not Detected Detected
df=data.frame(ID,Test1,Test2,Test3,stringsAsFactors=F)

df您可以尝试
应用(df,1,函数(x)ifelse(任意(x==“已检测”),“已检测”,“负”)
。当我在这个“测试”数据上使用它时,它就像您所说的那样工作。当我在自己的数据上使用它时,“Test4”的所有结果都是否定的。我不知道为什么?请检查替代方案,否则您需要发布原始数据谢谢!工作完美!不客气!如果有帮助,考虑接受和/或投票。
df$Test4 <- ifelse(
  apply(df, 1, function(x) any(grepl("^(?!.*Not).*Detected.*$", x, perl = T))),
  "Detected",
  "Negative"
)
df = data.frame(ID, Test1, Test2, Test3, stringsAsFactors=F)
df <- mutate(df, Test4 = ifelse('Detected' %in% c(Test1, Test2, Test3), 'Detected', 'Negative'))

  ID        Test1        Test2        Test3    Test4
1  1     Detected     Detected Not Detected Detected
2  2 Not Detected Not Detected     Detected Detected
3  3     Detected     Detected Not Detected Detected
4  4     Detected     Detected Not Detected Detected