我有一个data.frame有很多列(~50).其中一些是字符,一些是数字,其中三个用于分组.
我需要:
比方说,我们使用修改后的虹膜数据如下:
data(iris)
iris$year <- rep(c(2000,3000),each=25) ## for grouping
iris$color <- rep(c("red","green","blue"),each=50) ## character column
iris[1,] <- NA ## introducing NAs
Run Code Online (Sandbox Code Playgroud)
我总共有~50列,数字和字符混合在一起.我一直在尝试这样的事情:
giris <- group_by(iris, Species, year)
cls <- unlist(sapply(giris, class)) ## find out classes
action <- ifelse(cls == "numeric", "mean", "first")
action <- paste(action)
summarise_each(giris, action)
Run Code Online (Sandbox Code Playgroud)
我得到的是对于组中所有列的意思,后面是具有相应组中的第一个值的列.并且没有处理NAs ......这不是我寻求的......
帮助任何人?
我最近看了有关如何抑制使用小组dplyr内的所有但一个值的第一个出现的意见(dplyr覆盖所有但一个值在一组中的第一个事件).
解决方案是一个非常聪明的解决方案,现在我正努力找到一些同样有效的东西,以防我需要仅抑制n个下一个值.
例如,在下面的代码中,我创建了一个新的"标记"列:
library('dplyr')
data(iris)
set.seed(1)
iris$tag <- sample(c(0,1), 150, replace=TRUE, prob = c(0.7, 0.3))
giris <- iris %>% group_by(Species)
# Source: local data frame [150 x 6]
# Groups: Species [3]
#
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species tag
# (dbl) (dbl) (dbl) (dbl) (fctr) (dbl)
# 1 5.1 3.5 1.4 0.2 setosa 0
# 2 4.9 3.0 1.4 0.2 setosa 0
# 3 4.7 3.2 1.3 0.2 setosa 0
# 4 4.6 3.1 1.5 0.2 setosa …Run Code Online (Sandbox Code Playgroud) 我有一个分组的 data_frame,其中“标签”列采用值“0”和“1”。在每组中,我需要找到第一个出现的“1”并将所有剩余的出现更改为“0”。有没有办法在 dplyr 中实现它?
例如,让我们采用“iris”数据并添加额外的“tag”列:
data(iris)
set.seed(1)
iris$tag <- sample( c(0, 1), 150, replace = TRUE, prob = c(0.8, 0.2))
giris <- iris %>% group_by(Species)
Run Code Online (Sandbox Code Playgroud)
在“giris”中,在“setosa”组中,我只需要保留第一次出现的“1”(即在第4行)并将其余的设置为“0”。这看起来有点像敷面膜什么的……
有办法做到吗?我一直在尝试“哪个”和“重复”,但没有成功。我一直在考虑只过滤“1”,保留它们,然后与剩余的集合连接,但这似乎很尴尬,特别是对于 12GB 的数据集。
我仍然在学习R并且碰到了一些超出我的感受的东西.我花了2个小时试图自己搞清楚并且失败了:-(.
我有一个data.frame(让我们想到iris,例如)我想用ifelse进行子集化.如果第一行是"setosa",我想要一个带有前50行的data.frame,如果没有,则需要接下来的100行.见下文.
data (iris)
a <- ifelse(iris$Species[1] == "setosa", iris[1:50,],iris[51:150,])
Run Code Online (Sandbox Code Playgroud)
我希望上面的内容能够返回原始data.frame的一个子集,但实际上我得到的是
[[1]]
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1 5.4 5.1 4.6
[24] 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8
[47] 5.1 4.6 5.3 5.0
Run Code Online (Sandbox Code Playgroud)
我根本就没弄明白......