我有一个名为df
的示例数据:
Value1 Value2 Identifier
1 0.01544308 9.984557 high
2 0.02857169 9.971428 high
3 0.02767568 9.972324 low
4 0.03003700 9.969963 high
5 0.02779373 9.972206 low
6 0.02869768 9.971302 high
我现在想要创建一个具有组合值的新列,具体取决于标识符列的内容。 如果Identifier值为“high”,我想在新列中包含Value1,如果它为“low”,我想在新列中使用Value2。
我已尝试使用此代码:
> df$Score <-0
> df$Score[df$Identifier == "high"] <- df$Value1
> df$Score[df$Identifier == "low"] <- df$Value2
这有点工作,但我收到此错误消息:
4:在df $ Score [df $ Identifier ==“high”]&lt; - df $ Value1:number of 要替换的项目不是更换长度的倍数 5:在df $ Score [df $ Identifier ==“low”]&lt; - df $ Value2:要到的项目数 替换不是替换长度的倍数
当我检查新列Score
中的值时,它适用于Value1,但对于Value2不太适合。
我做错了什么?或者可能有一种完全不同的方法?任何帮助表示赞赏。感谢。
答案 0 :(得分:1)
可重复的例子:
> df = data.frame(v1=runif(10), v2=runif(10)+100, id=sample(c("High","Low"),10,TRUE))
> df
v1 v2 id
1 0.5369817 100.7348 High
2 0.4603543 100.2849 Low
3 0.7916333 100.3077 High
4 0.9786784 100.6317 Low
5 0.9116897 100.6764 Low
6 0.3311296 100.5460 High
7 0.4623154 100.5480 Low
8 0.5737816 100.1262 High
9 0.3905863 100.0561 Low
10 0.6010738 100.3528 Low
你想要的是ifelse
:
> df$Score = ifelse(df$id=="High",df$v1,df$v2)
> df
v1 v2 id Score
1 0.5369817 100.7348 High 0.5369817
2 0.4603543 100.2849 Low 100.2848737
3 0.7916333 100.3077 High 0.7916333
4 0.9786784 100.6317 Low 100.6316633
5 0.9116897 100.6764 Low 100.6763961
6 0.3311296 100.5460 High 0.3311296
7 0.4623154 100.5480 Low 100.5479902
8 0.5737816 100.1262 High 0.5737816
9 0.3905863 100.0561 Low 100.0561174
10 0.6010738 100.3528 Low 100.3527770