R 如何创建一个新列,指示某些其他列是否包含给定值?

R 如何创建一个新列,指示某些其他列是否包含给定值?,r,dplyr,R,Dplyr,我希望在data.frame中有一个新的列,以指示对于每一行,数字“2”是否出现在某些其他列中。下面是一个适用于小型data.frame的简单版本: df <- data.frame(mycol.1 = 1:5, mycol.2= 5:1, other.col = -2:2) df$mycols.contain.two <- df$mycol.1 ==2 | df$mycol.2 ==2 df mycol.1 mycol.2 other.col mycols.contain.

我希望在data.frame中有一个新的列,以指示对于每一行,数字“2”是否出现在某些其他列中。下面是一个适用于小型data.frame的简单版本:

df <- data.frame(mycol.1 = 1:5,  mycol.2= 5:1, other.col = -2:2)
df$mycols.contain.two <- df$mycol.1 ==2 | df$mycol.2 ==2
df

  mycol.1 mycol.2 other.col mycols.contain.two
1       1       5        -2              FALSE
2       2       4        -1               TRUE
3       3       3         0              FALSE
4       4       2         1               TRUE
5       5       1         2              FALSE

df您可以通过索引来实现它。让我们看一下
mtcars
数据

head(mtcars)

                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
之后,我们可以索引任何列。假设我们对第8列到第11列感兴趣

 mtcars$new <- rowSums(mtcars[,8:11]==2)>0
你可以做:

df <- data.frame(mycol.1 = 1:5,  mycol.2= 5:1, other.col = -2:2)
df$TYPE <- ifelse(rowSums(ifelse(sapply(df, function (x){x == 2}), 1, 0)) > 0 , "TRUE", "FALSE")

# > df
# mycol.1 mycol.2 other.col  TYPE
# 1       1       5        -2 FALSE
# 2       2       4        -1  TRUE
# 3       3       3         0 FALSE
# 4       4       2         1  TRUE
# 5       5       1         2  TRUE
df
#mycol.1 mycol.2其他col类型
#1 15-2错误
#2 4-1正确
#30错
#4 2 1正确
#5 5 1 2正确

您可以使用一个简单的
apply()
循环:

df <- data.frame(mycol.1 = 1:5,  mycol.2= 5:1, other.col = -2:2)
df$mycols.contain.two <- apply(df, 1, function(x){any(x == 2)})

df
df$new\u col=rowSums(df[,1:2]==2)>0
您可以使用
grep()
使用名称搜索仅选择某些列。如果添加
df <- data.frame(mycol.1 = 1:5,  mycol.2= 5:1, other.col = -2:2)
df$mycols.contain.two <- apply(df, 1, function(x){any(x == 2)})
df <- data.frame(mycol.1 = 1:5,  mycol.2= 5:1, other.col = -2:2)
df$mycols.contain.two <- apply(df, 1, function(x){any(x[1:3] == 2)})