以此示例variables df <- data.frame(month=rep(1:3,2), student=rep(c("Amy", "Bob"), each=3), A=c(9, 7, 6, 8, 6, 9), B=c(6, 7, 8, 5, 6, 7)) 我可以使用spread从tidyr改变这种广泛的格式。 > df[, -4] %>% spread(student, A) month Amy Bob 1 1 9 8 2 2 7 6 3 3 6 9 但是,我怎么能传播两个值,例如A和B ,这样的输出是类似的 month Amy.A Bob.A Amy.B Bob.B 1 1 9 8 6 5 2 […]
我试图重现dplyr包中的一个例子,但是这个错误信息。 我期待看到每个组合的频率产生一个新的列n。 有人能告诉我我失踪了吗? 我三重检查,包被加载。 感谢您的帮助,一如既往。 library(dplyr) # summarise peels off a single layer of grouping by_vs_am <- group_by(mtcars, vs, am) by_vs <- summarise(by_vs_am, n = n()) #Error in n() : This function should not be called directly
我对dplyr动词mutate_each.有点困惑mutate_each. 使用基本的mutate将一列数据转换成z分数,并在你的data.frame中创build一个新的列(这里的名字是z_score_data )是z_score_data : newDF <- DF %>% select(one_column) %>% mutate(z_score_data = one_column – (mean(one_column) / sd(one_column)) 但是,由于我想要转换多列数据,所以我应该使用mutate_each动词。 newDF <- DF %>% mutate_each(funs(scale)) 到现在为止还挺好。 但是至今我还没有弄明白: 我怎么能给这些新的列适当的名字,就像我可以在mutate ? 我怎样才能select我想变异的某些列,就像我在第一种情况下select的一样? 谢谢你的帮助。
这是一个示例数据框架: d <- data.frame( x = runif(90), grp = gl(3, 30) ) 我想要d的子集,包含每个值为grp的前5个值为x的行。 使用base-R,我的方法是这样的: ordered <- d[order(d$x, decreasing = TRUE), ] splits <- split(ordered, ordered$grp) heads <- lapply(splits, head) do.call(rbind, heads) ## x grp ## 1.19 0.8879631 1 ## 1.4 0.8844818 1 ## 1.12 0.8596197 1 ## 1.26 0.8481809 1 ## 1.18 0.8461516 1 ## […]
我想从一个dynamicfilter的SQL服务器拉一些数据。 我用以下方式使用伟大的R包dplyr: #Create the filter filter_criteria = ~ column1 %in% some_vector #Connect to the database connection <- src_mysql(dbname <- "mydbname", user <- "myusername", password <- "mypwd", host <- "myhost") #Get data data <- connection %>% tbl("mytable") %>% #Specify which table filter_(.dots = filter_criteria) %>% #non standard evaluation filter collect() #Pull data 这段代码工作正常,但现在我想循环它在我的表的所有列,所以我想写的filter为: #Dynamic filter i […]
在使用plyr我经常发现使用adply来标量函数是非常有用的,我必须将它应用到每一行。 例如 data(iris) library(plyr) head( adply(iris, 1, transform , Max.Len= max(Sepal.Length,Petal.Length)) ) Sepal.Length Sepal.Width Petal.Length Petal.Width Species Max.Len 1 5.1 3.5 1.4 0.2 setosa 5.1 2 4.9 3.0 1.4 0.2 setosa 4.9 3 4.7 3.2 1.3 0.2 setosa 4.7 4 4.6 3.1 1.5 0.2 setosa 4.6 5 5.0 3.6 1.4 0.2 setosa 5.0 6 5.4 […]
当突变是有条件的(取决于某些列值的值)时,可以使用mutate吗? 这个例子有助于展示我的意思。 structure(list(a = c(1, 3, 4, 6, 3, 2, 5, 1), b = c(1, 3, 4, 2, 6, 7, 2, 6), c = c(6, 3, 6, 5, 3, 6, 5, 3), d = c(6, 2, 4, 5, 3, 7, 2, 6), e = c(1, 2, 4, 5, 6, 7, 6, 3), f = c(2, […]
当列的元素具有不同数量的string时,我有分割列值的问题。 我可以用plyr做,例如: library(plyr) column <- c("jake", "jane jane","john john john") df <- data.frame(1:3, name = column) df$name <- as.character(df$name) df2 <- ldply(strsplit(df$name, " "), rbind) View(df2) 因此,我们有与给定元素中的最大刺入次数相关的列数的dataframe。 当我尝试在dplyr中完成时,我使用了do函数: library(dplyr) df2 <- df %>% do(data.frame(strsplit(.$name, " "))) 但我得到一个错误: Error in data.frame("jake", c("jane", "jane"), c("john", "john", "john" : arguments imply differing number of rows: 1, 2, 3 […]
我想在另一个函数中使用dplyr::group_by函数,但是我不知道如何将parameter passing给这个函数。 有人可以提供一个工作的例子? library(dplyr) data(iris) iris %.% group_by(Species) %.% summarise(n = n()) # ## Source: local data frame [3 x 2] ## Species n ## 1 virginica 50 ## 2 versicolor 50 ## 3 setosa 50 mytable0 <- function(x, …) x %.% group_by(…) %.% summarise(n = n()) mytable0(iris, "Species") # OK ## Source: local data […]
我想在summarise引用一个未知的列名。 dplyr 0.3引入的标准评估函数允许使用variables引用列名,但是当您在summarise调用base R函数时,这似乎不起作用。 library(dplyr) key <- "v3" val <- "v2" drp <- "v1" df <- data_frame(v1 = 1:5, v2 = 6:10, v3 = c(rep("A", 3), rep("B", 2))) DF如下所示: > df Source: local data frame [5 x 3] v1 v2 v3 1 1 6 A 2 2 7 A 3 3 8 A 4 4 […]