r语言 - 根据预定义的列值向列添加二进制值



我有一个示例数据集,如下所示:

df <- structure(list(Category1 = c("Alpha: 0", "Alpha: 0", "Alpha: 0", 
"Alpha: 3", "Alpha: 0"), 
Category2 = c("Beta: 1", "Beta: 0",  "Beta:0", 
"Beta: 1", "Beta: 1"), 
Category3 = c("Charlie: 2",  "Charlie: 0",
"Charlie: 0", "Charlie: 2", "Charlie: 2"), 
Output = c(NA,  NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, -5L ))

我正在尝试根据Category1Category2Category3列中的值在输出列中添加 1 或 0 的二进制值。如果这些列中每列的值如下:"Alpha:0"、"Beta:0"和"Charlie:0",那么我希望在"输出"列下的同一行中添加"1"。对于任何其他组合,我希望在"输出"列中添加"0"。关于如何以简单的方式完成此操作的任何建议?

谢谢!

我们可以从每个元素中提取值并使用rowSums来检查您的状况,即

as.integer(rowSums(sapply(df[-4], function(i)as.numeric(gsub('\D+', '', i)))) == 0)
#[1] 0 1 1 0 0

执行此操作的基本 R 方法是使用ifelse

df$Output = ifelse(df$Category1 == "Alpha: 0" & df$Category2 == "Beta: 0" & df$Category3 == "Charlie: 0", 1, 0)
df
Category1 Category2  Category3 Output
1  Alpha: 0   Beta: 1 Charlie: 2      0
2  Alpha: 0   Beta: 0 Charlie: 0      1
3  Alpha: 0   Beta: 0 Charlie: 0      1
4  Alpha: 3   Beta: 1 Charlie: 2      0
5  Alpha: 0   Beta: 1 Charlie: 2      0

您可以使用grepl来测试它是否包含0,并all是否所有列都是这种情况。把+放在前面,你会得到01.假设Alpha:,Beta:,Charlie:在那里。

+(apply(df[1:3], 1, function(x) all(grepl("0", x))))
#[1] 0 1 1 0 0

最新更新