[英]How to manipulate cases and variables in a data frame
我只是在学习数据争论。 目前我正在整理一个包含 6422 个观察值和 20 个变量的数据框。
我添加了一个示例来说明我的问题。 我有几列具有相同的案例,我想将其总结为 1 个案例(在示例列 x1、x2、x3、x4 和第 1、2、3 行中)。 相应的列 value1(在示例 1、2、3 中)和 value2(在示例 7、8、9 中)应该以将它们转换为同一行的方式进行操作。
我的目标是将数据框 df1 操作为数据框 df7
df1 <- data.frame(x1,x2,x3,x4,stats.title,value1,value2)
# x1 x2 x3 x4 stats.title value1 value2
#1 A B C D I 1 7
#2 A B C D J 2 8
#3 A B C D K 3 9
#4 E F G H I 4 10
#5 E F G H J 5 11
#6 E F G H K 6 12
df 7 <- rbind(df5,df6)
# x1 x2 x3 x4 value1_I value1_J value1_K value2_I value2_J value2_K
#1 A B C D 1 2 3 7 8 9
#4 E F G H 4 5 6 10 11 12
附上例子:
library(magrittr)
library(dplyr)
library(tidyr)
x1 <- rep(c("A","E"), each=3)
x2<- rep(c("B","F"), each=3)
x3<- rep(c("C","G"), each=3)
x4<- rep(c("D","H"), each=3)
stats.title <- rep(c("I","J","K"), times=2)
value1 <- (1:6)
value2 <- (7:12)
df1 <- data.frame(x1,x2,x3,x4,stats.title,value1,value2)
# x1 x2 x3 x4 stats.title value1 value2
#1 A B C D I 1 7
#2 A B C D J 2 8
#3 A B C D K 3 9
#4 E F G H I 4 10
#5 E F G H J 5 11
#6 E F G H K 6 12
df2 <- df1[1,] %>% select(-stats.title,-value1,-value2)
# x1 x2 x3 x4
#1 A B C D
df2.1 <- df1[4,] %>% select(-stats.title,-value1,-value2)
# x1 x2 x3 x4
#4 E F G H
df3 <- df1 %>% select(stats.title,value1,value2)
# stats.title value1 value2
#1 I 1 7
#2 J 2 8
#3 K 3 9
#4 I 4 10
#5 J 5 11
#6 K 6 12
df4 <- pivot_wider(df3[1:3,], names_from = stats.title, values_from = c("value1","value2"))
df4 <- as.data.frame(df4)
df4.1 <- pivot_wider(df3[4:6,], names_from = stats.title, values_from = c("value1","value2"))
df4.1 <- as.data.frame(df4.1)
df5 <- data.frame(df2,df4)
df6 <- data.frame(df2.1,df4.1)
df 7 <- rbind(df5,df6)
# x1 x2 x3 x4 value1_I value1_J value1_K value2_I value2_J value2_K
#1 A B C D 1 2 3 7 8 9
#4 E F G H 4 5 6 10 11 12
我在这里先向您的帮助表示感谢。
我尝试了上面显示的示例。 由于我有 6422 行,我正在寻找一种有效的方法来操作数据框。
您表现出了足够的努力:这是解决方案:诀窍是首先pivot_longer
:
library(dplyr)
library(tidyr)
df1 %>%
pivot_longer(c(value1, value2)) %>%
pivot_wider(
id_cols = x1:x4, # you can omit
names_from = c(name, stats.title),
values_from = value)
x1 x2 x3 x4 value1_I value2_I value1_J value2_J value1_K value2_K
<chr> <chr> <chr> <chr> <int> <int> <int> <int> <int> <int>
1 A B C D 1 7 2 8 3 9
2 E F G H 4 10 5 11 6 12
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.