gpt4 book ai didi

r - 所有数据框行到新列

转载 作者:行者123 更新时间:2023-12-05 09:07:46 25 4
gpt4 key购买 nike

我想将任意数量的数据帧行移动到列,而不是作为键值对(如 tidyr::pivot_wider),就像新列一样。

enter image description here

所以这是一个数据框

df <- data.frame(A = c(1, 2, 3),
B = c(4, 5, 6),
C = c(7, 8, 9),
ID = c("ID", "ID", "ID"))

我可以像这样使用 c,但我必须指定每一行,我想避免这样做。我不关心列命名约定。 X1, X2 等都可以。

l <- c(df[,1], df[,2], df[,3], df[,4])

data.frame(matrix(unlist(l), ncol=length(l), byrow=T))
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16
1 1 2 3 4 5 6 7 8 9 10 11 12 ID ID ID ID

这还会在 X13X14X15X16 中留下重复的值,我也会这样做喜欢避免。

有没有更好的方法,最好是在 basedplyr/purrr 中并且没有 for 循环?

最佳答案

试试这个。您可以使用 tidyverse 函数将数据整形为 long,将 ID 保存在 id 变量中,使用 row_number() 创建新名称,然后使用 整形为 wide >pivot_wider()。这是使用您共享的数据的代码:

library(ggplot2)
library(dplyr)
library(tidyr)
#Code
newdf <- df %>% pivot_longer(-ID) %>%
group_by(ID,name) %>%
mutate(name=paste0(name,'_',row_number())) %>%
pivot_wider(names_from = name,values_from=value)

输出:

# A tibble: 1 x 10
# Groups: ID [1]
ID A_1 B_1 C_1 A_2 B_2 C_2 A_3 B_3 C_3
<fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 ID 1 4 7 2 5 8 3 6 9

或者试试这个:

#Code 2
newdf <- df %>% pivot_longer(-ID) %>%
group_by(ID,name) %>%
mutate(name=paste0(name,'_',row_number())) %>%
pivot_wider(names_from = name,values_from=value,names_sort = T)

输出:

# A tibble: 1 x 10
# Groups: ID [1]
ID A_1 A_2 A_3 B_1 B_2 B_3 C_1 C_2 C_3
<fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 ID 1 2 3 4 5 6 7 8 9

关于r - 所有数据框行到新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64464728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com