我想在R中使用sapply
创建一个数组。但我在数据框中使用了3个向量。例如,我想生成x(i)=0
if a(i) +b(i)+c(i)==0
,其中a
,b
和c
是数据框中的向量。这可以通过sapply
或mapply
来实现吗?
答案 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.frame
,a
和b
的{{1}},c
会添加第i行,相当于sum(vex[i,])
!
答案 1 :(得分:0)
假设x
已预先初始化为全1,而df
是包含a
,b
和c
的数据框,则一个简单的解决方案是:
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