相关疑难解决方法(0)

如何在R中的data.table中完全使用变量中的列名

首先:感谢@MattDowle; data.table是我开始使用以来发生过的最好的事情之一R.

第二:我知道变量列名的各种用例的许多变通方法data.table,包括:

  1. 选择/赋值data.table变量,这些变量名称存储在字符向量中
  2. 使用R中的变量在data.table中传递列名
  3. 通过保存在变量中的名称引用data.table列
  4. 以编程方式将列名称传递给data.table
  5. Data.table元编程
  6. 如何编写一个调用调用data.table的函数的函数?
  7. 在`data.table`中使用动态列名
  8. data.table,R中的动态列名
  9. 使用以下内容分配多个列:= data.table,group
  10. 使用data.table在"group by"操作中设置列名
  11. R使用data.table汇总多个列

可能更多我没有参考.

但是:即使我学会了上面记录的所有技巧,以至于我从来不必查看它们以提醒自己如何使用它们,我仍然会发现使用作为参数传递给函数的列名非常繁琐的任务.

我正在寻找的是以下解决方法/工作流程的"最佳实践认可"替代方案.考虑到我有一堆类似数据的列,并希望对这些列或它们的集合执行一系列类似的操作,其中操作具有任意高的复杂性,并且列名称组传递给指定的每个操作在变量中.

我意识到这个问题听起来很人为,但我却以惊人的频率遇到它.这些例子通常非常混乱,很难将与这个问题相关的功能分开,但我最近偶然发现了一个相当简单的简化用作MWE的方法:

library(data.table)
library(lubridate)
library(zoo)

the.table <- data.table(year=1991:1996,var1=floor(runif(6,400,1400)))
the.table[,`:=`(var2=var1/floor(runif(6,2,5)),
                var3=var1/floor(runif(6,2,5)))]

# Replicate data across months
new.table <- the.table[, list(asofdate=seq(from=ymd((year)*10^4+101),
                                           length.out=12,
                                           by="1 month")),by=year]

# Do a complicated procedure to each variable in some group.
var.names <- c("var1","var2","var3")

for(varname in var.names) {
    #As suggested in an answer to Link 3 above
    #Convert the column name to a …
Run Code Online (Sandbox Code Playgroud)

r calculated-columns programmatically-created data.table

48
推荐指数
2
解决办法
4740
查看次数

使用data.table计算和汇总/汇总列

我想计算和聚合(总和)a中的列data.table,并且找不到最有效的方法来执行此操作.这似乎与我想要的R总结多个列data.table接近.

我的数据:

set.seed(321)
dat <- data.table(MNTH = c(rep(201501,4), rep(201502,3), rep(201503,5), rep(201504,4)), 
                  VAR = sample(c(0,1), 16, replace=T))

> dat
     MNTH VAR
 1: 201501   1
 2: 201501   1
 3: 201501   0
 4: 201501   0
 5: 201502   0
 6: 201502   0
 7: 201502   0
 8: 201503   0
 9: 201503   0
10: 201503   1
11: 201503   1
12: 201503   0
13: 201504   1
14: 201504   0
15: 201504   1
16: 201504   0
Run Code Online (Sandbox Code Playgroud)

我希望VAR通过MNTH使用data.table进行计数和求和.期望的结果:

    MNTH COUNT VAR …
Run Code Online (Sandbox Code Playgroud)

aggregate r dataframe data.table

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

R具有data.table的多列的多个统计信息

我希望获得与R中相同的结果,使用data.table汇总多个列,但需要几个汇总函数.

这是一个例子

data <- as.data.table(list(x1 = runif(200), x2 = 10*runif(200), group = factor(sample(letters[1:2]))))

res <- data[, rbindlist(lapply(.SD, function(x) {
              return(list(name = "varname", mean = mean(x), sd = sd(x)))
           }))
          , by = group, .SDcols = c("x1", "x2")
          ]
Run Code Online (Sandbox Code Playgroud)

并得到以下结果:

   group    name      mean        sd
1:     b varname 0.5755798 0.2723767
2:     b varname 5.5108886 2.7649262
3:     a varname 0.4906111 0.3060961
4:     a varname 4.7780189 2.9740149
Run Code Online (Sandbox Code Playgroud)

如何在第二列中获取列名('x1','x2')?我想我需要替换rbindlist其他东西,但是什么?有没有简单的解决方案?

r data-manipulation data.table

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

为 R 中的多个变量替换组内的特定 chr 值

1. 总结问题

嗨,我比较新R,这是我关于堆栈溢出的第一个问题,但我已经从这个站点学习了一段时间。我发现了类似的问题,但它们解释了如何删除缺失值、使用数值或仅适用于少量 ID

我有一个大数据框(200 000+ 行),其中一个变量是一个字母数字 ID,代表唯一的候选者,其他变量代表不同的特征。某些候选项在文件中多次包含,但对于同一特征具有不同的值。我想解决这些差异,以便以后能够删除重复项。数据结构类似于:

df <- tibble(ID = c("123abc", "123abc", "123abc", "456def", "456def", "789ghi"),
                 var1 = c("No", "Yes", "No", "No", "No", "No"),
                 var2 = c("No", "No", "No", "Yes", "No", "No"),
                 var3 = c("No", "No", "No", "No", "No", "Yes"))
Run Code Online (Sandbox Code Playgroud)

我的目标是首先根据 ID 创建子组,然后在每个 ID 中搜索以查看它们是否至少有一个“是”值,如果是,则将所有值更改为“是”。我想对几个变量(var1、var2、var3)重复这个。这是我想要的结果:

df <- tibble(ID = c("123abc", "123abc", "123abc", "456def", "456def", "789ghi"),
              var1 = c("Yes", "Yes", "Yes", "No", "No", "No"),
              var2 = c("No", "No", "No", …
Run Code Online (Sandbox Code Playgroud)

r

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

在多个列中汇总data.table

如何在多列中汇总不可靠数据的data.table

具体来说,给定

fields <- c("country","language")
dt <- data.table(user=c(rep(3, 5), rep(4, 5)),
                 behavior=c(rep(FALSE,5),rep(TRUE,5)),
                 country=c(rep(1,4),rep(2,6)),
                 language=c(rep(6,6),rep(5,4)),
                 event=1:10, key=c("user",fields))
dt
#     user behavior country language event
#  1:    3    FALSE       1        6     1
#  2:    3    FALSE       1        6     2
#  3:    3    FALSE       1        6     3
#  4:    3    FALSE       1        6     4
#  5:    3    FALSE       2        6     5
#  6:    4     TRUE       2        5     7
#  7:    4     TRUE       2        5     8
#  8:    4     TRUE       2        5 …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

在 R 中使用 data.table 包对列求和 - 出现 GForce sum(gsum) 错误

这是一个数据表:

Date     colA  colB  colC  .... month    year
01/23/15  2323  2323 2323        january  2015
.......
Run Code Online (Sandbox Code Playgroud)

在此 data.table 上,我尝试:1)按月和年对所有列值求和 2)在返回的子集中我想排除日期列

我在DT上设置的键如下:

setkey(DT, month, year)
Run Code Online (Sandbox Code Playgroud)

现在我运行此命令来实现上面步骤 1 和 2 中列出的操作:

DT[ ,lapply(.SD, sum, na.rm=TRUE), by=.(month , year), .SDcols= 2:(length(colnames(DT))-2) ]
Run Code Online (Sandbox Code Playgroud)

我从这里的 SO 帖子中得到了上面的例子。

当我运行这个......我收到以下错误:

Error in gsum(`colA`, na.rm = TRUE) : 
  Type 'character' not supported by GForce sum (gsum). Either add the prefix base::sum(.) or turn off GForce optimization using options(datatable.optimize=1)
Run Code Online (Sandbox Code Playgroud)

我不确定这意味着什么以及如何调试它......

任何援助将不胜感激。谢谢

r data.table

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

使用 dplyr 汇总多列 - 分类版本

以下这个问题,并且这一次,我想知道是总结在一个数据集分类变量的最佳选择。

我有一个数据集,例如

# A tibble: 10 <U+00D7> 4
    empstat_couple     nssec7_couple3  nchild07 age_couple
              <chr>             <fctr>    <fctr>      <dbl>
1         Neo-Trad   Lower Managerial    1child         39
2         Neo-Trad  Higher Managerial    1child         31
3         Neo-Trad Manual and Routine    1child         33
4             Trad  Higher Managerial    1child         43
Run Code Online (Sandbox Code Playgroud)

前 3 个变量是分类变量(字符或因子),最后一个是数字变量。

我想要的是类似(输出

                  var n   p
1:           Neo-Trad 6 0.6
2:    OtherArrangment 2 0.2
3:               Trad 2 0.2
4:  Higher Managerial 4 0.4
5:   Lower Managerial 5 0.5
6: Manual …
Run Code Online (Sandbox Code Playgroud)

r summary count dplyr data.table

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

使用R中的data.table对许多列求和,删除NA

这是我猜的两个问题.我正在尝试使用data.table包来总结一个大型数据集.假设我的原始大数据集是df1,不幸的是df1有50列(y0 ... y49),我想要3个字段的总和(segmentfield1,segmentfield2,segmentfield3).有没有比输入每个y0 ... y49列更简单的方法呢?与此相关的是,data.table是否有通用的na.rm = T而不是每个总和都输入?

dt1 <- data.table(df1)
setkey(dt1, segmentfield1, segmentfield2, segmentfield3)
dt2 <- dt1[,list( y0=sum(y0,na.rm=T), y1=sum(y1,na.rm=T), y2=sum(y2,na.rm=T), ... 
            y49=sum(y49,na.rm=T) ),
            by=list(segmentfield1, segmentfield2, segmentfield3)]
Run Code Online (Sandbox Code Playgroud)

r data.table

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

按组汇总所有列

我很肯定这是一个非常简单的答案,但是我似乎无法在多个条件下进行聚合或转换

我有一个看起来像这样的表:

> head(df, n=10L)
   STATE  EVTYPE FATALITIES INJURIES
1     AL TORNADO          0       15
3     AL TORNADO          0        2
4     AL TORNADO          0        2
5     AL TORNADO          0        2
6     AL TORNADO          0        6
7     AL TORNADO          0        1
9     AL TORNADO          1       14
11    AL TORNADO          0        3
12    AL TORNADO          0        3
13    AL TORNADO          1       26
Run Code Online (Sandbox Code Playgroud)

显然,这种情况还在继续...我要做的是在执行过程中按STATE和EVTYPE折叠,以计算致命和伤害,因此,如果这10行是我的有效数据集,那么结果将是一个单行数据帧:

   STATE  EVTYPE FATALITIES INJURIES
1     AL TORNADO          2       74
Run Code Online (Sandbox Code Playgroud)

我的完整框架有很多状态和许多EVTYPE

aggregate r

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

求和多列

我正在尝试编写一个函数,它将根据前两列中的值对数据帧中的列求和.例如,我有一个矩阵M,

Crs gr  P_7 P_8      
38  1   3   16
38  1   12  45
38  1   9   28
40  2   3   9
40  2   14  29
40  1   4   3
40  2   8   2
Run Code Online (Sandbox Code Playgroud)

我想首先根据column1(crs)和column2(gr)对列进行求和.结果将是,

    Crs gr  P_7  P_8      
    38  1   24  89
    40  2   25  40
    40  1   4   3
Run Code Online (Sandbox Code Playgroud)

目前我正在使用,

M <- M[, list(sum(P_7),sum(P_8)), by=list(Crs,gr)]
Run Code Online (Sandbox Code Playgroud)

但问题是,我必须定义不修复的列的名称.所以,我想知道如何在不定义列名的情况下这样做.提前致谢!

r data.table

0
推荐指数
2
解决办法
756
查看次数