【问题标题】:Divide each values in rows of different data frames by values stored in vector将不同数据帧行中的每个值除以向量中存储的值
【发布时间】:2018-12-21 04:40:09
【问题描述】:

我有两个数据框 df1 和 df2,它们存储在一个列表中:

$df1 


column 1.  column  2.     column 3 
       A          a6          1
       B          j7          2
       C          i0          3
       D          b2          4

$df2
    column 1.  column  2.  column 3 
       E          8h          1
       F          4d          2
       G          3n          3
       H          a9          4
       I          5%          5
       L          *9.         6

数据框有不同的行号,存储在list1中 list1

我想将代表排名的最后一列编号 3 除以总行数(除以每个值): 行号信息存储在一个向量中,它与这两个数据帧的行号不同,因为它们是具有更多行的更大数据帧的子集: vec

输出:

$df1 
$df1 nrow = 4
#df1_ALL nrow = 10
column 1.  column  2.  column 3 
   A          a6          1/10
   B          j7          2/10
   C          i0          3/10
   D          b2          4/10
$df2
$df2 nrow=6
$df2_ALL nrow = 20
column 1.  column  2.  column 3 
   E          8h          1/20
   F          4d          2/20
   G          3n          3/20
   H          a9          4/20
   I          5%          5/20
   L          *9.         6/20

我是这样写的:

list2<-list()

for (i in 1: length(list1)) {
+   list2[[i]]<- sweep(list1[[i]]$column3, 1,vec,'/')
+ }

但是给我以下错误:

Error in array(STATS, dims[perm]) : 'dims' cannot be of length 0
In addition: Warning message:
In sweep(myfiles[[i]]$rank, 1, g1, "/") :
  STATS is longer than the extent of 'dim(x)[MARGIN]'

任何帮助都会很棒,干杯

【问题讨论】:

    标签: r


    【解决方案1】:

    我们循环遍历数据集的list,使用Maptransform 将最后一列除以存储在vector('vec')中的该数据集的行数

    Map(function(x, y) transform(x, `column 3` = `column 3`/y), list1, vec)
    

    【讨论】:

    • 嗨 Akrun,我试过你的代码,对不起,是的,当我想将第 3 列除以数据框的行数时,这是正确的。
    • @PaoloLorenzini 抱歉,有什么问题
    • 现在,假设行号不是 4 或 6,而是存储在向量中的其他数字,例如 10 和 20,vec
    • 嗨 Akrun,非常感谢,我使用的是“Sweep”,但使用“Map”更好,现在它可以工作了,我在 for 循环中写了这样的东西:
    • 我为您的回答投了票(这很有帮助),但我的声誉不到 15,所以它说它没有显示,无论如何非常感谢您的帮助
    猜你喜欢
    • 2012-11-29
    • 2019-08-24
    • 2018-12-02
    • 2020-09-22
    • 1970-01-01
    • 2021-11-09
    • 2020-09-21
    • 1970-01-01
    • 2020-05-08
    相关资源
    最近更新 更多