2017-07-04 24 views
1

我想在嵌套数据帧上执行spread,但无法实现。下面是一个正常的数据帧上使用spread玩具数据帧:在嵌套数据帧上执行传播

df <- data.frame(A = 1:4, B = 5:8) 
df %>% spread(A,B) 

    1 2 3 4 
1 5 6 7 8 

下面是一个嵌套的数据帧和我已经尝试了玩具的例子(但不工作):

df <- data.frame(dummy=c(1,1,2,2), A = 1:4, B = 5:8) 
df %>% 
    nest(-dummy) %>% 
    mutate(data = map(data, ~spread(.x$A,.x$B))) 

Error in mutate_impl(.data, dots) : 
    Evaluation error: Invalid column specification. 

感谢您的帮助!

+2

“spread”的第一个参数是数据框,而不是列。所以也许'地图(数据,〜传播(.x,A,B))'? – lukeA

+1

'spread'使用非标准评估,因此您不能使用'$'subsetting;你需要提供一个'.data'参数,或者用上面的lukeA的建议,或者隐式地不用'〜':'df%>%nest(-dummy)%>%mutate(data = map(data,spread,A, B))' – alistaire

回答

0
df <- data.frame(dummy=c(1,1,2,2), A = 1:4, B = 5:8) 
df %>% 
    nest(-dummy) %>% 
    mutate(data = map(data, ~spread(.x, key = A, value = B))) 
+0

感谢你和'卢克',他在评论中首先提供了答案。 (我希望我能给你更多点@lukeA)。我尝试了'mutate(data = map(data,〜spread(.x,.x $ A,.x $ B)))',这没有奏效。仍然计算出参数类型... – CPak