假设我有这个数据集
> example <- data.frame(a = 1:10, b = 10:1, c = 1:5 )
我想创建一个新变量d
。我希望在d
中,当至少在变量a b c
中存在值1 2或3时,值为1。
d
应如下所示:
d <- c(1, 1, 1, 0, 0, 1, 1, 1, 1, 1)
提前致谢。
答案 0 :(得分:2)
您可以使用1, 2 or 3
获取每行中出现as.integer
的逻辑向量,并将其包装在as.integer(rowSums(df == 1|df == 2| df == 3) > 0)
#[1] 1 1 1 0 0 1 1 1 1 1
中以转换为0和1,即
// Setup the connection to Azure Storage
var storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("<ConnectionStringName>"));
答案 1 :(得分:1)
你可以使用apply(虽然很慢)
来做到这一点 逻辑:any
将比较是否存在1,2或3,apply
用于在每一行上迭代此逻辑。然后最后通过添加+0将布尔结果转换为数字(您可以在此处选择as.numeric
,以防您想要更具表现力)
d <- apply(example,1 ,function(x)any(x==1|x==2|x==3))+0
如果有人想要限制列或想要在某些列上运行逻辑,那么也可以这样做:
d <- apply(example[,c("a","b","c")], 1, function(x)any(x==1|x==2|x==3))+0
在这里,您可以根据自己的需要控制列,或根据您的需要忽略。
<强>输出强>:
> d
[1] 1 1 1 0 0 1 1 1 1 1
答案 2 :(得分:1)
适用于任何数量的变种:
example <- data.frame(a = 1:10, b = 10:1, c = 1:5 )
x <- c(1, 2, 3)
as.integer(Reduce(function(a, b) (a %in% x) | (b %in% x), example))
答案 3 :(得分:1)
另外两种可能与任意数量的列一起使用的可能性:
> example
a b c d
1 1 10 1 1
2 2 9 2 1
3 3 8 3 1
4 4 7 4 0
5 5 6 5 0
6 6 5 1 1
7 7 4 2 1
8 8 3 3 1
9 9 2 4 1
10 10 1 5 1
两者都给出了:
private void initPlantList(View v){ RecyclerView rV = v.findViewById(R.id.plantsRecycler); PlantListAdapter pLA = new PlantListAdapter(this); Log.d("PLA", pLA.hasContext()); rV.setAdapter(pLA); rV.setLayoutManager(new LinearLayoutManager(this));
答案 4 :(得分:1)
使用dplyr
包:
library(dplyr)
x <- 1:3
example %>% mutate(d = as.integer(a %in% x | b %in% x | c %in% x))
答案 5 :(得分:0)
一般解决方案:
example %>%
sapply(function(i)i %in% x) %>% apply(1,any) %>% as.integer
#[1] 1 1 1 0 0 1 1 1 1 1
答案 6 :(得分:-1)
尝试使用此方法,验证列表中是否存在x
中存在的一个元素。
x<-c(1,2,3)
example$d<-as.numeric(example$a %in% x | example$b %in% x | example$c %in% x)
example
a b c d
1 1 10 1 1
2 2 9 2 1
3 3 8 3 1
4 4 7 4 0
5 5 6 5 0
6 6 5 1 1
7 7 4 2 1
8 8 3 3 1
9 9 2 4 1
10 10 1 5 1