在数据框中获取特定值

时间:2015-02-06 13:43:57

标签: r

我有一个data.frame,如果另一个在数据帧中,我希望从一个单元格中获取某个值。

我尝试了应用功能。

n <- c(2, 3, 0 ,1) 
s <- c(0, 1, 1, 2) 
b <- c("THIS", "FALSE", "NOT", "THIS") 
df <- data.frame(n, s, b)

df <- sapply(df$Vals, FUN=function(x){ if(b[x]=="THIS") ? n[x] : s[x] } )

我的逻辑是:

if(b at position x is equal to "This") {
   add n[x] to the column df$Vals
} else {
   add s[x] to the column df$Vals
}

x是一行。

任何建议我做错了什么?

感谢您的回复!

2 个答案:

答案 0 :(得分:2)

像这样:

df$Vals = with(df, ifelse(b=="THIS", n, s))

或直接生成data.frame

transform(df, Vals=with(df, ifelse(b=="THIS", n, s)))

#  n s     b Vals
#1 2 0  THIS    2
#2 3 1 FALSE    1
#3 0 1   NOT    1
#4 1 2  THIS    1

附加条件:

func=Vectorize(function(b, s, n){if(b=='THIS') return(n);if(b==F) return(n+s);s})
df$Vals = with(df, func(b,s,n))

答案 1 :(得分:1)

或者您可以使用row/column索引

df$Vals <- df[1:2][cbind(1:nrow(df),(df$b!='THIS')+1)]
df
#  n s     b Vals
#1 2 0  THIS    2
#2 3 1 FALSE    1
#3 0 1   NOT    1
#4 1 2  THIS    1