【发布时间】:2021-02-16 16:57:37
【问题描述】:
一些背景信息以便更好地理解
我有一个非常具体的数据框。这基本上是我调查中的答案样本。变量v1 代表一个选择题;受访者从 1 到 4 中选择变体,他/她可以选择唯一或多个选项。每个选择的变体都将受访者重新定位到块:如果选择了1,则受访者将重新定位到o_v1_1、c_v1_1和f_v1_1等等。
问题
我想编写一个函数,将我的数据结构从宽更改为长。但我正在为pivot_longer 苦苦挣扎,因为它不会产生理想的输出。
这是带有一些初始数据处理的示例数据框:
structure(list(seance_id = c(1, 2, 3, 4), respondent = c("A",
"B", "C", "D"), v1...3 = c(1, 1, NA, 1), v1...4 = c(2, NA, 2,
NA), v1...5 = c(3, 4, 4, NA), v1...6 = c(4, NA, NA, NA), o_v1_1 = c(6,
1, NA, 4), c_v1_1 = c(7, 1, NA, 1), f_v1_1 = c(8, 1, NA, 1),
o_v1_2 = c(10, NA, 4, NA), c_v1_2 = c(8, NA, 1, NA), f_v1_2 = c(3,
NA, 3, NA), o_v1_3 = c(4, NA, NA, NA), c_v1_3 = c(1, NA,
NA, NA), f_v1_3 = c(2, NA, NA, NA), o_v1_4 = c(10, 5, 4,
NA), c_v1_4 = c(9, 6, 5, NA), f_v1_4 = c(9, 6, 6, NA)), row.names = c(NA,
-4L), class = c("tbl_df", "tbl", "data.frame"))
data <- data %>% mutate_if(is.numeric, as.character)
colnames(data) <- c("seance_id", "respondent", "v1", "v1", "v1", "v1", "o_v1_1",
"c_v1_1", "f_v1_1", "o_v1_2", "c_v1_2", "f_v1_2", "o_v1_3", "c_v1_3",
"f_v1_3", "o_v1_4", "c_v1_4", "f_v1_4")
这就是我试图让我的桌子变长的方法:
long <- data %>%
pivot_longer(cols = -`seance_id`, names_to = "v1", values_to = "answer")
这就是我想要得到的:
`séance_id` respondent direction answer_dir criteria criteria_answer
<dbl> <chr> <chr> <dbl> <chr> <dbl>
1 1 A v1 1 o_v1_1 6
2 1 A v1 1 c_v1_1 7
3 1 A v1 1 f_v1_1 8
4 1 A v1 2 o_v1_2 10
5 1 A v1 2 c_v1_2 8
6 1 A v1 2 f_v1_2 3
我已经研究 SO 2 天了,还没有解决我的问题。如何有效地使用pivot_longer 来获得理想的输出?有什么方法可以自动化我渴望我的 dfs 的过程吗?我有 30 多个 dfs,嵌套在一个 Excel 文件中的不同列表中。
【问题讨论】:
-
你能帮我理解为什么你在源表中标记了四列
v1吗?它们是否意味着不同的东西?这不会导致歧义吗? -
@JonSpring 我正在尝试模仿我的原始数据框。我知道这可能会带来一些问题......也许是因为我正在努力让我的桌子变长
-
它们是什么意思,你想如何使用它们?
-
@JonSpring
v1代表一个选择题。调查平台的架构不允许我以列的形式重新编码受访者的选择。
标签: r data-manipulation