使用数据框中的sapply和特定数组创建数组

时间:2014-04-22 20:45:33

标签: r sapply

我想在R中使用sapply创建一个数组。但我在数据框中使用了3个向量。例如,我想生成x(i)=0 if a(i) +b(i)+c(i)==0,其中abc是数据框中的向量。这可以通过sapplymapply来实现吗?

2 个答案:

答案 0 :(得分:1)

这是一种可能性:

set.seed(10)
vex <- data.frame(
  a=sample(-1:1,size=10,replace=T),
  b=sample(-1:1,size=10,replace=T),
  c=sample(-1:1,size=10,replace=T)
  )
vex

x <- sapply(1:nrow(vex), function(i) ifelse(sum(vex[i,]==0),0,1))
x

由于vex是列data.frameab的{​​{1}},c会添加第i行,相当于sum(vex[i,])

答案 1 :(得分:0)

假设x已预先初始化为全1,而df是包含abc的数据框,则一个简单的解决方案是:

x[with(df, a + b + c == 0)] <- 0

这里我们生成一个索引向量,只要满足所需条件(TRUE),就包含a + b + c == 0,然后使用它在x中将这些值替换为零。使用@Shambho生成的数据框,我们得到:

[1] 1 1 0 1 1 0 1 1 1 1