【问题标题】:calculate each row with some values in a list用列表中的一些值计算每一行
【发布时间】:2019-03-12 06:10:20
【问题描述】:

我想知道如何在 R 中正确地进行矢量计算。

我有一个这样的数据集。

            stay cops graduation
hinshi_#0  54722 6945      83674
hinshi_#1  13928 1798      21616
hinshi_#2    320   49        485
hinshi_#3  36010 4984      55184
hinshi_#4   7484  916      10618
hinshi_#5      6    0          6
hinshi_#6   6605  830       9741
hinshi_#7      2    0          5

我也有一个列表l<-c(20124 2682 30138)。 我在这里要做的是将数据表的每一行与列表分开。 让我拿起第一行数据,

 hinshi_#0  54722 6945      83674

我希望它们像54722/20124, 6945/2682, 83764/30138- 用列表的第一个值计算向量的第一个值,第二个和第三个也必须发生同样的情况。有什么好的处理方法吗?谢谢。

【问题讨论】:

  • "我有一个列表 l 因为这不是有效的 R 代码,你能澄清一下 l 是否是 @987654326 @ 或 vector?
  • 我认为最简单的方法是转置您的数据,然后将其除以向量。像 t(dataset)/l

标签: r dataframe vector


【解决方案1】:

如果我理解正确,这里有一个选项

l <- c(20124, 2682, 30138)

df / sapply(l, rep, each = nrow(df))
#                  stay       cops   graduation
#hinshi_#0 2.719241e+00 2.58948546 2.7763620678
#hinshi_#1 6.921089e-01 0.67039523 0.7172340567
#hinshi_#2 1.590141e-02 0.01826995 0.0160926405
#hinshi_#3 1.789406e+00 1.85831469 1.8310438649
#hinshi_#4 3.718943e-01 0.34153617 0.3523126949
#hinshi_#5 2.981515e-04 0.00000000 0.0001990842
#hinshi_#6 3.282151e-01 0.30947054 0.3232132192
#hinshi_#7 9.938382e-05 0.00000000 0.0001659035

样本数据

df <- read.table(text =
    "stay cops graduation
'hinshi_#0'  54722 6945      83674
'hinshi_#1'  13928 1798      21616
'hinshi_#2'    320   49        485
'hinshi_#3'  36010 4984      55184
'hinshi_#4'   7484  916      10618
'hinshi_#5'      6    0          6
'hinshi_#6'   6605  830       9741
'hinshi_#7'      2    0          5", header = T)

【讨论】:

  • 谢谢!它有效,但我也收到了一些警告 - 1: In FUN(X[[i]], ...) : first element used of 'each' argument,我知道这只是一个警告,但我只是好奇它的真正含义。谢谢!
  • @user9191983 根据您提供的示例数据,这应该在没有任何警告的情况下运行。 each 只是 data.frame 的行数,是一个标量。请仔细检查您的数据。
【解决方案2】:

l 是@Maurits Ever 的答案中提供(更正)的向量。 我们可以使用purrr:

as.data.frame(purrr::map2(df,l,function(x,y) x/y))

结果(可格式化去除科学显示):

    stay       cops   graduation
1 2.719241e+00 2.58948546 2.7763620678
2 6.921089e-01 0.67039523 0.7172340567
3 1.590141e-02 0.01826995 0.0160926405
4 1.789406e+00 1.85831469 1.8310438649
5 3.718943e-01 0.34153617 0.3523126949
6 2.981515e-04 0.00000000 0.0001990842
7 3.282151e-01 0.30947054 0.3232132192
8 9.938382e-05 0.00000000 0.0001659035

【讨论】:

  • 谢谢!我试过了,但我在这里看到了一些错误......看起来计算在行和列之间运行(不是行与行),因为我遇到了类似Error: 'x' (87) and '.y' (3) are different lengths 的错误
  • 你能显示你使用的代码吗?!很难知道,因为我只是在访问一个玩具数据集。
猜你喜欢
  • 2018-10-28
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 2014-04-07
  • 2016-09-02
相关资源
最近更新 更多