我在R中有一个这样的框架(C1和C2列):
C1 C2 1 A 1 H 1 C 2 D 2 R 2 G 3 Z 3 L 3 M
字符串我想这样做:我尝试过的选项都没有给我这个布局。
wd2eg0qa1#
这可能是有用的:
X <- c(1,1,1,2,2,2,3,3,3) Y <- c("A","H","C","D","R","G","Z","L","M") DF <- data.frame(C1=X, C2=Y) DF
字符串$$C1\,C2\ 1 \,A \ 1 \,H \ 1 \,C \ 2 \,D \ 2 \,R \ 2 \,G \ 3 \,Z \ 3 \,L \ 3 \,M \
t <- NULL for (i in 1:max(X)){ t[[i]] <- DF$C2[which(DF$C1 %in% i)] } TDF <- data.frame("1"= t[[1]], "2" = t[[2]], "3" = t[[3]]) TDF
型$$X1\,X2 \,X3 \ A \,D \,Z \ H \,R \,L \ C \,G \,M \$$
dzjeubhm2#
首先,你的问题,如上所述,没有解决方案,因为你不能使用整数作为列名。但更重要的是,你想做的事情实际上在“整洁”数据方面没有意义。在整理数据中,每一行都应该代表一个唯一的“观察”。然而,在你给予的原始框架中,集合{A,D,Z}之间没有关联,目标框架中的其他行也是如此。因此,没有一组整理操作会达到你想要的效果。但是,如果您创建了另一个列来关联它们,则可以在spread运算符中使用该列来获得所需的内容。
spread
library(tidyverse) df1 = data.frame( C1 = rep(c(1,2,3), each=3), C2 = LETTERS[1:9] ) df1 %>% spread(C1, C2) #> Error: Each row of output must be identified by a unique combination of keys. #> Keys are shared for 9 rows: #> * 1, 2, 3 #> * 4, 5, 6 #> * 7, 8, 9 df2 = data.frame( C1 = rep(c(1,2,3), each=3), C2 = LETTERS[1:9], C3 = rep(c(1,2,3), times=3) ) df2 %>% spread(C3, C2) #> C1 1 2 3 #> 1 1 A B C #> 2 2 D E F #> 3 3 G H I
字符串创建于2020-05-08由reprex package(v0.3.0)
2条答案
按热度按时间wd2eg0qa1#
这可能是有用的:
字符串
$$C1\,C2\ 1 \,A \ 1 \,H \ 1 \,C \ 2 \,D \ 2 \,R \ 2 \,G \ 3 \,Z \ 3 \,L \ 3 \,M \
型
$$X1\,X2 \,X3 \ A \,D \,Z \ H \,R \,L \ C \,G \,M \$$
dzjeubhm2#
首先,你的问题,如上所述,没有解决方案,因为你不能使用整数作为列名。
但更重要的是,你想做的事情实际上在“整洁”数据方面没有意义。
在整理数据中,每一行都应该代表一个唯一的“观察”。然而,在你给予的原始框架中,集合{A,D,Z}之间没有关联,目标框架中的其他行也是如此。因此,没有一组整理操作会达到你想要的效果。
但是,如果您创建了另一个列来关联它们,则可以在
spread
运算符中使用该列来获得所需的内容。字符串
创建于2020-05-08由reprex package(v0.3.0)