小编Chr*_*ris的帖子

按因子级别汇总,将其他变量保留在结果数据框中

我正在尝试为每个因子级别计算数值列的最小值,同时在结果数据帧中保留另一个因子的值.

# dummy data
dat <- data.frame(
    code = c("HH11", "HH45", "JL03", "JL03", "JL03", "HH11"), 
    index = c("023434", "3377477", "3388595", "3377477", "1177777", "023434"), 
    value = c(24.1, 37.2, 78.9, 45.9, 20.0, 34.6)
    )
Run Code Online (Sandbox Code Playgroud)

我想要的结果是value每个级别的最小值code,保留index在结果数据框中.

# result I want:
#   code value    index
# 1 HH11  24.1   023434
# 2 HH45  37.2  3377477
# 3 JL03  20.0  1177777


# ddply attempt
library(plyr)
ddply(dat, ~ code, summarise, val = min(value))
#   code   val
# 1 HH11  24.1 …
Run Code Online (Sandbox Code Playgroud)

r

16
推荐指数
1
解决办法
3万
查看次数

R中因子水平的分位数

我有一个数据框,我试图在数据框中创建一个新变量,该变量具有连续变量的分位数var1,对于每个因子级别strata.

# some data
set.seed(472)
dat <- data.frame(var1 = rnorm(50, 10, 3)^2,
                  strata = factor(sample(LETTERS[1:5], size = 50, replace = TRUE))
                  )

# function to get quantiles
qfun <- function(x, q = 5) {
    quantile <- cut(x, breaks = quantile(x, probs = 0:q/q), 
        include.lowest = TRUE, labels = 1:q)
    quantile
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用两种方法,这两种方法都不会产生可用的结果.首先,我尝试使用aggregate适用qfun于以下各级strata:

qdat <- with(dat, aggregate(var1, list(strata), FUN = qfun))
Run Code Online (Sandbox Code Playgroud)

这通过因子级别返回分位数,但是输出很难强制回到数据帧中(例如,使用unlist不将新变量值与数据帧中的正确行对齐).

第二种方法是按步骤执行此操作:

tmp1 <- with(dat, split(var1, strata))
tmp2 …
Run Code Online (Sandbox Code Playgroud)

r

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

Sum重复然后删除除第一次出现之外的所有内容

我有一个数据框(~5000行,6列),包含一些id变量的重复值.我有另一个连续变量x,我想为每个副本求和id.观察是时间依赖的,有yearmonth变量,我想按时间顺序保持每个副本的第一次观察,id并在第一次观察中添加随后的欺骗.

我已经包含了类似于我的虚拟数据:dat1.我还包括一个数据集,显示了我期望结果的结构:outcome.

我尝试了两种策略,这两种策略都没有给我我想要的东西(见下文).第一个策略为我提供了正确的值x,但是我放弃了我的年份和月份列 - 我需要为所有第一个重复id值保留这些值.第二种策略没有x正确地加总值.

如何获得我想要的结果的任何建议将不胜感激.

# dummy data set
set.seed(179)
dat1 <- data.frame(id = c(1234, 1321, 4321, 7423, 4321, 8503, 2961, 1234, 8564, 1234),
                   year = rep(c("2006", "2007"), each = 5),
                   month = rep(c("December", "January"), each = 5),
                   x = round(rnorm(10, 10, 3), 2))

# desired outcome
outcome <- data.frame(id = c(1234, 1321, 4321, 7423, 8503, 2961, …
Run Code Online (Sandbox Code Playgroud)

r plyr

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

标签 统计

r ×3

plyr ×1