我有一个数据框:
ID value is_valid
A 134 TRUE
B 345 FALSE
C 131 TRUE
我想将它做成9列的一行,所以每个ID都会有相同的列。因此,所需的结果必须如下所示:
A_ID A_value A_is_valid B_ID B_value B_is_valid C_ID C_value C_is_valid
A 134 TRUE B 345 FALSE C 131 TRUE
我该怎么做?我不知道
答案 0 :(得分:1)
我们可以创建一个序列列并使用pivot_wider
library(dplyr)
library(tidyr)
df1 %>%
mutate(rn = LETTERS[row_number()]) %>%
pivot_wider(names_from = rn, values_from = -rn)
# A tibble: 1 x 9
# ID_A ID_B ID_C value_A value_B value_C is_valid_A is_valid_B is_valid_C
# <chr> <chr> <chr> <int> <int> <int> <lgl> <lgl> <lgl>
#1 A B C 134 345 131 TRUE FALSE TRUE
df1 <- structure(list(ID = c("A", "B", "C"), value = c(134L, 345L, 131L
), is_valid = c(TRUE, FALSE, TRUE)), class = "data.frame", row.names = c(NA,
-3L))
答案 1 :(得分:1)
这是使用reshape
reshape(
cbind(P = 1, Q = df$ID, df),
direction = "wide",
idvar = "P",
timevar = "Q"
)[-1]
给出
ID.A value.A is_valid.A ID.B value.B is_valid.B ID.C value.C is_valid.C
1 A 134 TRUE B 345 FALSE C 131 TRUE
数据
> dput(df)
structure(list(ID = c("A", "B", "C"), value = c(134L, 345L, 131L
), is_valid = c(TRUE, FALSE, TRUE)), class = "data.frame", row.names = c(NA,
-3L))