我有一个示例数据集,如下所示:
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 ))
我正在尝试根据Category1
、Category2
Category3
列中的值在输出列中添加 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
是否所有列都是这种情况。把+
放在前面,你会得到0
和1
.假设Alpha:,Beta:,Charlie:在那里。
+(apply(df[1:3], 1, function(x) all(grepl("0", x))))
#[1] 0 1 1 0 0