根据其他列创建虚拟列

时间:2018-04-27 09:36:28

标签: r multiple-columns dummy-variable

假设我有这个数据集

> 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)

提前致谢。

7 个答案:

答案 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