我有一个数据框:
df <- structure(list(ziekten = c(1, 2, 2, 2, 2, 2, 1, 2, 2, 2), voedselallergie = c("no",
"no", "no", "no", "no", "no", "no", "no", "no", "no"), ziekaller2 = c("no",
"no", "no", "no", "no", "no", "no", "no", "no", "no"), hooikoorts = c("yes",
"no", "no", "no", "no", "no", "yes", "no", "no", "no"), ziekaller4 = c("no",
"no", "no", "no", "no", "no", "no", "no", "no", "no"), ziekaller5 = c("no",
"no", "no", "no", "no", "no", "no", "no", "no", "no"), anderallergie = c("no",
"no", "no", "no", "no", "no", "no", "no", "no", "no"), astma = c("no",
"no", "no", "no", "no", "no", "no", "no", "no", "no"), ziekdiabet1 = c("no",
"no", "no", "no", "no", "no", "no", "no", "no", "no")), row.names = c(NA,
-10L), class = c("tbl_df", "tbl", "data.frame"))
这只是实际数据框中的列总数的一小部分,但我想将列中的值更改为相应的列名称。我知道如何使用 ifelse
或 case_when
来完成此操作,但这效率不高。
第一列可以保持原样,因此从第二列开始,我想将值“yes”更改为列名称。结果如下:
df_new <- structure(list(ziekten = c(1, 2, 2, 2, 2, 2, 1, 2, 2, 2), voedselallergie = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA), ziekaller2 = c(NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA), hooikoorts = c("hooikoorts", NA,
NA, NA, NA, NA, "hooikoorts", NA, NA, NA), ziekaller4 = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA), ziekaller5 = c(NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA), anderallergie = c(NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA), astma = c(NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA), ziekdiabet1 = c(NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA)), row.names = c(NA, -10L), class = c("tbl_df", "tbl",
"data.frame"))
希望能帮到你!
最佳答案
一个衬垫底座 R:
df[-1] <- Map(function(nm, x) ifelse(x == "yes", nm, nm[NA]),
names(df)[-1], df[-1])
df
# # A tibble: 10 × 9
# ziekten voedselallergie ziekaller2 hooikoorts ziekaller4 ziekaller5 anderallergie astma ziekdiabet1
# <dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# 1 1 <NA> <NA> hooikoorts <NA> <NA> <NA> <NA> <NA>
# 2 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
# 3 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
# 4 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
# 5 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
# 6 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
# 7 1 <NA> <NA> hooikoorts <NA> <NA> <NA> <NA> <NA>
# 8 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
# 9 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
# 10 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
关于r - 有没有办法将多列中的值转为列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75920891/