下面是我将在这个问题中引用的data.table.我的目标是将data1列和data2列相加,并在一个名为sum的新列中给出结果.以下是我最近的一些try 以及我从中获得的结果.显然,没有一个结果是正确的,或者它们是错误的.我知道有很多问题是为了解决类似的问题,但我还没有找到这个问题的解决方案.这可能是一些简单的东西,我只是没有领会.有谁知道我做错了什么吗?在将来,我想添加给出这些列的SD、Mean、Medium和Sem的列.提前感谢您的帮助!

> sum_tabnew
      location       bin       time data1 data2 loc_id condition loc_coord
   1:    Loc01 (-0.24,1]   0.966764   258     0      1    WT_CTL        a1
   2:    Loc01     (1,2]   2.000012   399     0      1    WT_CTL        a1
   3:    Loc01     (2,3]   2.999657   502     0      1    WT_CTL        a1
   4:    Loc01     (3,4]   3.999978   284     0      1    WT_CTL        a1
   5:    Loc01     (4,5]   4.999684   335     0      1    WT_CTL        a1
  ---                                                                     
8540:    Loc96 (114,115] 115.000607     0    90     96   MUT_CTL       h12
8541:    Loc96 (115,116] 115.984122     0   708     96   MUT_CTL       h12
8542:    Loc96 (116,117] 116.967636     0   383     96   MUT_CTL       h12
8543:    Loc96 (117,118] 117.967847     0     0     96   MUT_CTL       h12
8544:    Loc96 (118,119] 119.000967     0     0     96   MUT_CTL       h12
#Get a vector of all the 'data' columns
data_vec <- colnames(sum_tabnew)[grepl("data",colnames(sum_tabnew))]

#Change all the 'data' columns data types to double, so they won't have to be changed later
sum_tabnew[ , (data_vec) := lapply(.SD, as.double), .SDcols = data_vec]
test_sum <- sum_tabnew[, list(sum = sum(test_tab)), by = list(condition, time)]
> test_sum
      condition       time     sum
   1:    WT_CTL   0.966764 2294112
   2:    WT_CTL   2.000012 2294112
   3:    WT_CTL   2.999657 2294112
   4:    WT_CTL   3.999978 2294112
   5:    WT_CTL   4.999684 2294112
  ---                             
1066:   MUT_CTL 115.000607 2294112
1067:   MUT_CTL 115.984122 2294112
1068:   MUT_CTL 116.967636 2294112
1069:   MUT_CTL 117.967847 2294112
1070:   MUT_CTL 119.000967 2294112

test_sum <- sum_tabnew[, sum(.SD), .SDcols = data_vec, by = list(condition, time)]
> test_sum
      condition       time   V1
   1:    WT_CTL   0.966764 3492
   2:    WT_CTL   2.000012  399
   3:    WT_CTL   2.999657 2194
   4:    WT_CTL   3.999978  284
   5:    WT_CTL   4.999684 2520
  ---                          
1066:   MUT_CTL 115.000607 3181
1067:   MUT_CTL 115.984122 4524
1068:   MUT_CTL 116.967636 6925
1069:   MUT_CTL 117.967847 2060
1070:   MUT_CTL 119.000967 2159

test_sum <- sum_tabnew[, lapply(.SD, function(x) sum(x)), by = list(condition, time)]
Error in sum(x) : invalid 'type' (character) of argument

UPDATE个 根据r2evens的请求,以下是可使用格式的数据

> dput(head(sum_tabnew,10))
structure(list(location = c("Loc01", "Loc01", "Loc01", "Loc01", 
"Loc01", "Loc01", "Loc01", "Loc01", "Loc01", "Loc01"), bin = structure(1:10, levels = c("(-0.24,1]", 
"(1,2]", "(2,3]", "(3,4]", "(4,5]", "(5,6]", "(6,7]", "(7,8]", 
"(8,9]", "(9,10]"), class = "factor"), time = c(0.966764, 
2.000012, 2.999657, 3.999978, 4.999684, 5.999687, 6.999671, 8, 
9.00001, 9.999827), data1 = c(258, 399, 502, 284, 335, 309, 0, 
82, 1916, 2), data2 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), loc_id = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), condition = structure(c(12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L), levels = c("MUT1", 
"MUT2", "MUT3", "MUT4", "MUT5", "MUT6", "MUT7", "MUT8", "MUT9", 
"MUT10", "MUT_CTL", "WT_CTL"), class = "factor"), loc_coord = c("a1", 
"a1", "a1", "a1", "a1", "a1", "a1", "a1", "a1", "a1")), row.names = c(NA, 
-10L), class = c("data.table", "data.frame")

推荐答案

如果您正在寻找未知列数的行求和,那么我们可以在内部使用rowSums:

sum_tabnew[, sum := rowSums(.SD), .SDcols = patterns("^data")][]
#     location       bin     time data1 data2 loc_id condition loc_coord   sum
#       <char>    <fctr>    <num> <num> <num>  <int>    <fctr>    <char> <num>
#  1:    Loc01 (-0.24,1] 0.966764   258     0      1    WT_CTL        a1   258
#  2:    Loc01     (1,2] 2.000012   399     0      1    WT_CTL        a1   399
#  3:    Loc01     (2,3] 2.999657   502     0      1    WT_CTL        a1   502
#  4:    Loc01     (3,4] 3.999978   284     0      1    WT_CTL        a1   284
#  5:    Loc01     (4,5] 4.999684   335     0      1    WT_CTL        a1   335
#  6:    Loc01     (5,6] 5.999687   309     0      1    WT_CTL        a1   309
#  7:    Loc01     (6,7] 6.999671     0     0      1    WT_CTL        a1     0
#  8:    Loc01     (7,8] 8.000000    82     0      1    WT_CTL        a1    82
#  9:    Loc01     (8,9] 9.000010  1916     0      1    WT_CTL        a1  1916
# 10:    Loc01    (9,10] 9.999827     2     0      1    WT_CTL        a1     2

由于您提到要使用其他函数来执行此操作,因此可以执行以下操作:

funs <- list(sum=sum, sigma=sd, med=function(z) median(z, na.rm=TRUE))
sum_tabnew[, c(names(funs)) := lapply(funs, function(fun) apply(.SD, 1, fun)), .SDcols = patterns("^data")]
sum_tabnew
#     location       bin     time data1 data2 loc_id condition loc_coord   sum       sigma   med
#       <char>    <fctr>    <num> <num> <num>  <int>    <fctr>    <char> <num>       <num> <num>
#  1:    Loc01 (-0.24,1] 0.966764   258     0      1    WT_CTL        a1   258  182.433550 129.0
#  2:    Loc01     (1,2] 2.000012   399     0      1    WT_CTL        a1   399  282.135606 199.5
#  3:    Loc01     (2,3] 2.999657   502     0      1    WT_CTL        a1   502  354.967604 251.0
#  4:    Loc01     (3,4] 3.999978   284     0      1    WT_CTL        a1   284  200.818326 142.0
#  5:    Loc01     (4,5] 4.999684   335     0      1    WT_CTL        a1   335  236.880772 167.5
#  6:    Loc01     (5,6] 5.999687   309     0      1    WT_CTL        a1   309  218.495995 154.5
#  7:    Loc01     (6,7] 6.999671     0     0      1    WT_CTL        a1     0    0.000000   0.0
#  8:    Loc01     (7,8] 8.000000    82     0      1    WT_CTL        a1    82   57.982756  41.0
#  9:    Loc01     (8,9] 9.000010  1916     0      1    WT_CTL        a1  1916 1354.816593 958.0
# 10:    Loc01    (9,10] 9.999827     2     0      1    WT_CTL        a1     2    1.414214   1.0

R相关问答推荐

R创建一个数据透视表,计算多个组的百分比

在位置周围设定一个半径并识别该半径内的其他位置

R中具有gggplot 2的Likert图,具有不同的排名水平和显示百分比

如何修复R码的置换部分?

lightgbm发动机在tidymmodels中的L1正则化""

二维样条,严格以一个参数递增

使用整齐的计算(curl -curl )和杂音

如何将R中数据帧中的任何Nas替换为最后4个值

按时间顺序对不同事件进行分组

将箭头绘制在图形外部,而不是图形内部

在另一个包中设置断点&S R函数

R中的类别比较

R中Gamma回归模型均方误差的两种计算方法不一致

仅当后续值与特定值匹配时,才在列中回填Nas

生存时间序列的逻辑检验

如何使投篮在R中保持一致

使用&Fill&Quot;在gglot中创建 colored颜色 渐变

如何在矩阵图中按标准对数据进行分组以绘制矩阵

将日期列从字符转换为日期得到的结果是NAS

从单个html段落中提取键-值对