R 中变量的个案(如 SPSS)
Cases to variables in R (like SPSS)
我正在尝试根据特定列将我的行分布到多个列中。
结果应该是一个具有唯一 recordid 和一组列的数据框
基于另一列中的唯一值。
recordid location measA measB measC
1 body <NA> 5 <NA>
2 body <NA> >10 text1
2 head <0.1 <0.1 <NA>
3 body 0.02 0.5 text2
3 head <NA> <NA> text3
3 toes <0.1 <0.1 >20
此处,位置变量是测量列的分组。结果应该是这样的:
recordid measA_body measA_head measA_toes measB_body measB_head measB_toes measC_body measC_head measC_toes
1 <NA> <NA> <NA> 5 <NA> <NA> <NA> <NA> <NA>
2 <NA> <0.1 <NA> >10 <0.1 <NA> text1 <NA> <NA>
3 0.02 <NA> <NA> 0.5 <NA> <NA> text2 text3 >20
在 SPSS 中,这是重组菜单中变量函数的情况,但我没有在 R 中找到某种类似的函数。我尝试了某种形式的 pivot_wider,但无法让它工作多列。在 R 中执行此操作的最佳方法是什么?
你可以这样做:
library(dplyr)
df %>% pivot_wider(names_from = location, values_from = c(measA, measB, measC))
# A tibble: 3 x 10
recordid measA_body measA_head measA_toes measB_body measB_head measB_toes
<int> <chr> <chr> <chr> <chr> <chr> <chr>
1 1 <NA> <NA> <NA> 5 <NA> <NA>
2 2 <NA> <0.1 <NA> >10 <0.1 <NA>
3 3 0.02 <NA> <0.1 0.5 <NA> <0.1
# ... with 3 more variables: measC_body <chr>, measC_head <chr>,
# measC_toes <chr>
有数据:
df <-
structure(list(recordid = c(1L, 2L, 2L, 3L, 3L, 3L), location = c("body",
"body", "head", "body", "head", "toes"), measA = c("<NA>", "<NA>",
"<0.1", "0.02", "<NA>", "<0.1"), measB = c("5", ">10", "<0.1",
"0.5", "<NA>", "<0.1"), measC = c("<NA>", "text1", "<NA>", "text2",
"text3", ">20")), class = "data.frame", row.names = c(NA, -6L
))
我正在尝试根据特定列将我的行分布到多个列中。 结果应该是一个具有唯一 recordid 和一组列的数据框 基于另一列中的唯一值。
recordid location measA measB measC
1 body <NA> 5 <NA>
2 body <NA> >10 text1
2 head <0.1 <0.1 <NA>
3 body 0.02 0.5 text2
3 head <NA> <NA> text3
3 toes <0.1 <0.1 >20
此处,位置变量是测量列的分组。结果应该是这样的:
recordid measA_body measA_head measA_toes measB_body measB_head measB_toes measC_body measC_head measC_toes
1 <NA> <NA> <NA> 5 <NA> <NA> <NA> <NA> <NA>
2 <NA> <0.1 <NA> >10 <0.1 <NA> text1 <NA> <NA>
3 0.02 <NA> <NA> 0.5 <NA> <NA> text2 text3 >20
在 SPSS 中,这是重组菜单中变量函数的情况,但我没有在 R 中找到某种类似的函数。我尝试了某种形式的 pivot_wider,但无法让它工作多列。在 R 中执行此操作的最佳方法是什么?
你可以这样做:
library(dplyr)
df %>% pivot_wider(names_from = location, values_from = c(measA, measB, measC))
# A tibble: 3 x 10
recordid measA_body measA_head measA_toes measB_body measB_head measB_toes
<int> <chr> <chr> <chr> <chr> <chr> <chr>
1 1 <NA> <NA> <NA> 5 <NA> <NA>
2 2 <NA> <0.1 <NA> >10 <0.1 <NA>
3 3 0.02 <NA> <0.1 0.5 <NA> <0.1
# ... with 3 more variables: measC_body <chr>, measC_head <chr>,
# measC_toes <chr>
有数据:
df <-
structure(list(recordid = c(1L, 2L, 2L, 3L, 3L, 3L), location = c("body",
"body", "head", "body", "head", "toes"), measA = c("<NA>", "<NA>",
"<0.1", "0.02", "<NA>", "<0.1"), measB = c("5", ">10", "<0.1",
"0.5", "<NA>", "<0.1"), measC = c("<NA>", "text1", "<NA>", "text2",
"text3", ">20")), class = "data.frame", row.names = c(NA, -6L
))