2017-03-17 48 views
2

此代码:为什么我不能在df_tbl中改变这个字段?

foo <- data.frame(x=c(1,2,3)) 
foo <- foo %>% group_by(x) 
foo <- foo %>% ungroup() %>% mutate(x=foo[,'x']) 

给出了这样的错误:

Error: not compatible with STRSXP 

,而这条线的工作原理:

foo <- foo %>% ungroup() %>% mutate(x=x) 

这是一个错误或功能?

回答

1

我不完全确定你在这里的意思。您创建了一个data.frame,其中包含一列和三个观察值,然后根据x进行分组,然后立即取消分组,最后使用mutate来自行创建(替换)列x。我可能会错过一些东西。如果您运行以下,错误消失:

foo <- data.frame(x = c(1, 2, 3)) 
foo <- foo %>% 
     group_by(x) %>% 
     ungroup() %>% 
     mutate(x = foo[,'x']) 

您应该使用R中<- - 没有冒犯的意思,也许你是熟悉Python。有关StackOverflow的其他问题记录类似的问题。但是,在这种情况下,我不确定我们可以谈论“bug”。 dplyr最好的部分是你可以传递对象而不用担心引号。为什么你会首先使用这种语法?寻找:

foo <- data.frame(x = c(1, 2, 3)) 
foo <- foo %>% 
     group_by(x) %>% 
     ungroup() %>% 
     mutate(x = x) 

它更简单,更直观。

+0

这是从一个实际的例子来简化显示错误。这段代码不是很有用,但是它的代码是。 – dfrankow

+0

另一种思考这个问题的方法是:为什么分组和取消分组会产生奇怪的错误? (同样,实际的代码有更多的东西是有道理的,我使用“奇怪的语法”,因为所选择的列名是从一个变量中设置的。) – dfrankow

相关问题