[英]How to condense a data frame into two columns based of a specific column entry
如果我有如下数据集
Rater1 10 a
Rater2 12 b
Rater2 5 c
Rater1 7 d
我应该如何编码 R 以将数据转换为两列中的格式
Rater1 Rater2
10 12
7 5
a b
d c
对那个
您可以执行以下操作:
as.data.frame(lapply(split(df, df$Rater), \(d) c(d$v1,d$v2)))
Output:
Rater1 Rater2
1 10 12
2 7 5
3 a b
4 d c
输入:
df = structure(list(Rater = c("Rater1", "Rater2", "Rater2", "Rater1"
), v1 = c(10, 12, 5, 7), v2 = c("a", "b", "c", "d")), class = "data.frame", row.names = c(NA,
-4L))
请注意,您的最终 dataframe 具有包含数字和字符的列,并且由于一列只能包含一个 class 所有数字都会变成字符。
我们可以在dplyr
和tidyr
库的帮助下做到这一点。 首先我们将列更改为字符,获取长格式数据,创建行号列来唯一标识每一行,最后获取宽格式数据。
library(dplyr)
library(tidyr)
df %>%
mutate(across(.fns = as.character)) %>%
pivot_longer(cols = -Rater) %>%
group_by(Rater) %>%
mutate(name = row_number()) %>%
ungroup %>%
pivot_wider(names_from = Rater, values_from = value) %>%
select(-name)
# Rater1 Rater2
# <chr> <chr>
#1 10 12
#2 a b
#3 7 5
#4 d c
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.