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