使用ID列展平数据框中的列表列

mlo*_*don 16 r reshape dataframe

我的数据框包含具有选择多个问题类型的调查的输出.一些单元格具有多个值.

df <- data.frame(a=1:3,b=I(list(1,1:2,1:3)))
df
  a       b
1 1       1
2 2    1, 2
3 3 1, 2, 3
Run Code Online (Sandbox Code Playgroud)

我想将列表弄平以获得以下输出:

df
  a       b
1 1       1
2 2       1
3 2       2
4 3       1
5 3       2
6 3       3
Run Code Online (Sandbox Code Playgroud)

应该很容易但不知何故我找不到搜索词.谢谢.

A5C*_*2T1 17

你可以使用unnest"tidyr":

library(tidyr)
unnest(df, b)
#   a b
# 1 1 1
# 2 2 1
# 3 2 2
# 4 3 1
# 5 3 2
# 6 3 3
Run Code Online (Sandbox Code Playgroud)


akr*_*run 7

使用base R,一个选项是stack在将list'b'列的元素命名为'a'元素的元素之后.我们可以setNames用来改变名字.

stack(setNames(df$b, df$a))
Run Code Online (Sandbox Code Playgroud)

或者另一种选择是使用unstack自动命名"B"与"一"元素列表元素,然后做stack得到data.frame输出.

stack(unstack(df, b~a))
Run Code Online (Sandbox Code Playgroud)

或者,我们可以使用一个方便的功能,listCol_lsplitstackshape转换的listdata.frame.

library(splitstackshape)
listCol_l(df, 'b')
Run Code Online (Sandbox Code Playgroud)

  • 干得好.我总是喜欢看到简单,优雅的基础解决方案. (2认同)