小编rpl*_*rpl的帖子

R:汇总多列(数字,字符)并删除NA

我有一个data.frame有很多列(~50).其中一些是字符,一些是数字,其中三个用于分组.

我需要:

  • 从数字列中删除NA
  • 计算每个数字列的平均值
  • 提取字符列的第一个元素

比方说,我们使用修改后的虹膜数据如下:

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 ......这不是我寻求的......

帮助任何人?

r dplyr na.rm

8
推荐指数
1
解决办法
3488
查看次数

dplyr抑制组中下一个n次出现的值

我最近看了有关如何抑制使用小组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)

r dplyr

7
推荐指数
1
解决办法
146
查看次数

dplyr 覆盖组中除了第一次出现的值之外的所有值

我有一个分组的 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 dplyr

5
推荐指数
1
解决办法
749
查看次数

R:ifelse,根据条件返回子集

我仍然在学习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)

我根本就没弄明白......

if-statement r subset

2
推荐指数
1
解决办法
3423
查看次数

标签 统计

r ×4

dplyr ×3

if-statement ×1

na.rm ×1

subset ×1