根据这些列的值创建包含其他列名称的新列
Create new column containing names of other columns based on values of those columns
我正在尝试根据其他变量的值创建一个新的字符变量(在我的示例 V4 中)。我需要使用列名来填充这个新变量。
我有这个:
V1 V2 V3
1 1 0 1
2 0 1 1
3 0 0 0
4 1 1 1
我希望新变量包含所有值等于 1 的列名
像这样:
V1 V2 V3 V4
1 1 0 1 "V1,V3"
2 0 1 1 "V2,V3"
3 0 0 0 " "
4 1 1 1 "V1,V2,V3"
示例数据:
data.frame(
V1 =c(1,0,0,1),
V2 = c(0,1,0,1),
V3 = c(1,1,0,1)
)
您可以使用以下代码:
library(dplyr)
df %>%
rowwise() %>%
mutate(V4 = paste0(names(.)[c_across() == 1], collapse = ','))
输出:
# A tibble: 4 × 4
# Rowwise:
V1 V2 V3 V4
<dbl> <dbl> <dbl> <chr>
1 1 0 1 "V1,V3"
2 0 1 1 "V2,V3"
3 0 0 0 ""
4 1 1 1 "V1,V2,V3"
数据
df <- data.frame(
V1 = c(1,0,0,1),
V2 = c(0,1,0,1),
V3 = c(1,1,0,1)
)
将 base R
与 apply
结合使用
df1$V4 <- apply(df1, 1, \(x) toString(names(x)[x ==1]))
我正在尝试根据其他变量的值创建一个新的字符变量(在我的示例 V4 中)。我需要使用列名来填充这个新变量。
我有这个:
V1 V2 V3
1 1 0 1
2 0 1 1
3 0 0 0
4 1 1 1
我希望新变量包含所有值等于 1 的列名
像这样:
V1 V2 V3 V4
1 1 0 1 "V1,V3"
2 0 1 1 "V2,V3"
3 0 0 0 " "
4 1 1 1 "V1,V2,V3"
示例数据:
data.frame(
V1 =c(1,0,0,1),
V2 = c(0,1,0,1),
V3 = c(1,1,0,1)
)
您可以使用以下代码:
library(dplyr)
df %>%
rowwise() %>%
mutate(V4 = paste0(names(.)[c_across() == 1], collapse = ','))
输出:
# A tibble: 4 × 4
# Rowwise:
V1 V2 V3 V4
<dbl> <dbl> <dbl> <chr>
1 1 0 1 "V1,V3"
2 0 1 1 "V2,V3"
3 0 0 0 ""
4 1 1 1 "V1,V2,V3"
数据
df <- data.frame(
V1 = c(1,0,0,1),
V2 = c(0,1,0,1),
V3 = c(1,1,0,1)
)
将 base R
与 apply
df1$V4 <- apply(df1, 1, \(x) toString(names(x)[x ==1]))