r - 添加一个新列,其中该行为 True 或其他特定值的列的名称
问题描述
我有这个数据框:
Name Pr VP Tr Me Sa Ar
Alicia 1 0 0 0 1 0
Bonnie 0 1 1 0 0 0
Cathy 1 1 1 1 1 1
Daphne 1 0 0 0 0 1
Elena 0 0 0 1 1 1
Faye 0 0 0 0 0 1
我想制作这个数据框,它添加一列,每列的名称为每行 1:
Name Pr VP Tr Me Sa Ar Nominations
Alicia 1 0 0 0 1 0 Pr, Ar
Bonnie 0 1 1 0 0 0 VP, Tr
Cathy 1 1 1 1 1 1 Pr, VP, Tr, Me, Sa, Ar
Daphne 1 0 0 0 0 1 Pr, Ar
Elena 0 0 0 1 1 1 Me, Sa, Ar
Faye 0 0 0 0 0 1 Ar
我更喜欢 tidyverse,但了解基础 R 也会很有用。
解决方案
apply
我们可以用andMARGIN = 1
和'names'遍历行,paste
其中'x'是1
df1$Nominations <- apply(df1[-1], 1, function(x) toString(names(x)[x == 1]))
df1$Nominations
#[1] "Pr, Sa" "VP, Tr" "Pr, VP, Tr, Me, Sa, Ar" "Pr, Ar"
#[5] "Me, Sa, Ar" "Ar"
或者使用tidyverse
, reshape to 'long' format with pivot_longer
, 按 'Name' 分组,通过summarise
' paste
name' 'value' 为 1 并加入原始数据集
library(dplyr)
library(tidyr)
df1 %>%
pivot_longer(cols = -Name) %>%
group_by(Name) %>%
summarise(Nominations = toString(name[as.logical(value)])) %>%
right_join(df1) %>%
select(names(df1), everything())
# A tibble: 6 x 8
# Name Pr VP Tr Me Sa Ar Nominations
# <chr> <int> <int> <int> <int> <int> <int> <chr>
#1 Alicia 1 0 0 0 1 0 Pr, Sa
#2 Bonnie 0 1 1 0 0 0 VP, Tr
#3 Cathy 1 1 1 1 1 1 Pr, VP, Tr, Me, Sa, Ar
#4 Daphne 1 0 0 0 0 1 Pr, Ar
#5 Elena 0 0 0 1 1 1 Me, Sa, Ar
#6 Faye 0 0 0 0 0 1 Ar
数据
df1 <- structure(list(Name = c("Alicia", "Bonnie", "Cathy", "Daphne",
"Elena", "Faye"), Pr = c(1L, 0L, 1L, 1L, 0L, 0L), VP = c(0L,
1L, 1L, 0L, 0L, 0L), Tr = c(0L, 1L, 1L, 0L, 0L, 0L), Me = c(0L,
0L, 1L, 0L, 1L, 0L), Sa = c(1L, 0L, 1L, 0L, 1L, 0L), Ar = c(0L,
0L, 1L, 1L, 1L, 1L)), class = "data.frame", row.names = c(NA,
-6L))
推荐阅读
- robotframework - 关键字“Selenium2Library.Get Element Attribute”需要 2 个参数,得到 1
- javascript - Js如何通过不同的Json数据类型进行映射
- r - 如何在 R 中执行以下查询
- c# - 为什么单元格“RowDataBound”内的按钮没有触发事件点击?
- laravel - 我无法访问“仪表板”。有一些问题无法访问仪表板
- node.js - 反应原生视频在开始时需要太多时间来显示视频流(nodejs流)
- excel - 如何修复“应用程序定义或对象定义的错误”
- azure-devops - 无法处理节点类型为“文本”的元素。azure devops 版本中仅支持 Element 和 EndElement 节点类型
- delphi - 有没有办法立即终止 TTask?
- python - 如何在不迭代的情况下根据特定对从数据框中选择结果?