2016-04-13 39 views
0

我想创建一个名为“Standard”的新列作为三个测试结果的组合(三个不同的列在我的数据集中)。如何从数据集现有列中的结果中创建新列(变量)

  • 如果所有三项测试均为正面,则该标准将被称为“强”。
  • 如果三分之二的测试是肯定的,该标准将被称为“中等”
  • 如果只有一个测试是肯定的,该标准将被称为“疏”
  • ,如果没有的测试是肯定的,标准将被称为“失败”。

我在数据集中有大约100条记录,我想找到一种方法可以在R中做到这一点,而无需手动进行。我没有尝试过任何东西,因为我不知道该怎么尝试,而且我对R是新手。任何帮助或提示都将非常感激。谢谢。

数据集是这样的:

 ID Test_1 Test_2 Test_3 
    1 positive positive positive 
    2 positive negative positive 
    3 positive positive negative 
    4 negative negative positive 
    5 negative positive negative 
    6 negative negative negative 
    7 positive negative negative 

下面是我所期待的最终数据集的样子:

 ID Test_1 Test_2 Test_3 Standard 
    1 positive positive positive Strong 
    2 positive negative positive Medium 
    3 positive positive negative Medium 
    4 negative negative positive Scanty 
    5 negative positive negative Scanty 
    6 negative negative negative Failed 
    7 positive negative negative Scanty 

回答

1
的一种方式

这里有一个选项,使用rowSums来索引标准值的向量(注意Ÿ必须以正确的顺序)

idx <- rowSums(df[-1] == "positive") +1L 
df$Standard <- c("Failed", "Scanty", "Medium", "Strong")[idx] 

结果:

> df 
    ID Test_1 Test_2 Test_3 Standard 
1 1 positive positive positive Strong 
2 2 positive negative positive Medium 
3 3 positive positive negative Medium 
4 4 negative negative positive Scanty 
5 5 negative positive negative Scanty 
6 6 negative negative negative Failed 
7 7 positive negative negative Scanty 
+0

Docendos,感谢您为我提供解决方案。我真的很感激它。 – ddkunda

0

ifelse是做

df$new <- apply(df[,-1], 1, function(i) length(i[i == 'positive'])) 
df$standard <- ifelse(df$new == 3, 'Strong', ifelse(df$new == 2, 'Medium', ifelse(df$new == 1, 'Scanty', 'Failed'))) 
df 
#  ID Test_1 Test_2 Test_3 new standard 
# 1 1 positive positive positive 3 Strong 
# 2 2 positive negative positive 2 Medium 
# 3 3 positive positive negative 2 Medium 
# 4 4 negative negative positive 1 Scanty 
# 5 5 negative positive negative 1 Scanty 
# 6 6 negative negative negative 0 Failed 
# 7 7 positive negative negative 1 Scanty 
+1

索托斯,非常感谢您的帮助。非常感谢 – ddkunda

0

您还可以使用mutate从包plyr。它可以通过添加新的或替换现有的列来改变数据框架。

+1

恐怕没有回答这个问题 –

相关问题