繁体   English   中英

如何根据特定列条目将数据框压缩为两列

[英]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 所有数字都会变成字符。

我们可以在dplyrtidyr库的帮助下做到这一点。 首先我们将列更改为字符,获取长格式数据,创建行号列来唯一标识每一行,最后获取宽格式数据。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM