如何从某个数据帧的第n列构造一个值向量,其中n是在某些向量中定义的每行值? 例:

> df <- data.frame(a=c(100, 110, 120, 130, 140),
                   b=c(200, 210, 220, 230, 240),
                   c=c(300, 310, 320, 330, 340))
> df
    a   b   c
1 100 200 300
2 110 210 310
3 120 220 320
4 130 230 330
5 140 240 340
> cl <- c(1, 3, 3, 2, 1)
> some.function(df, cl)

会导致:

[1] 100 310 320 230 140

===============>>#1 票数:3 已采纳

您可以按2列矩阵建立索引-第一列是行号,第二列是列号。

df[cbind(seq(cl), cl)]
# [1] 100 310 320 230 140

这是向量化操作,比用诸如sapply类的sapply遍历各行并从该行中获取适当的值要快得多:

# Slightly larger example, with 1000 rows
set.seed(144)
df <- matrix(rnorm(3000), nrow=1000)
cl <- sample(3, 1000, replace=TRUE)
all.equal(df[cbind(seq(cl), cl)], sapply(seq(nrow(df)), function(i) df[i, cl[i]]))
# [1] TRUE
library(microbenchmark)
microbenchmark(df[cbind(seq(cl), cl)], sapply(seq(nrow(df)), function(i) df[i, cl[i]]))
# Unit: microseconds
#                                             expr     min      lq       mean   median
#                           df[cbind(seq(cl), cl)]  23.828  26.335   34.26012  30.0350
#  sapply(seq(nrow(df)), function(i) df[i, cl[i]]) 855.481 922.449 1178.47502 996.3815
#         uq      max neval
#    38.0315  135.894   100
#  1111.3960 3414.374   100

  ask by liori translate from so

未解决问题?本站智能推荐:

1回复

在数据帧的每一行中选择2个相应的列

我很抱歉,因为这似乎是一个基本问题,但我一直在寻找更好的解决方案,但没有找到它。 我有以下类型的数据。 这使: myDATA 的Color的列对应与Stim通过数量,例如柱, Stim1显示在Color1等。 对于每一行,一个Stim以绿色显示。 我想找到该Stim并
2回复

使用数据帧列中的条件在R中生成向量

我有以下数组: 等等 我编写了一个函数,然后尝试使用apply进行矢量化,以便逐行运行计算,但是由于布尔值,该函数不起作用: 我试过了 但它引发了以下异常: tarr $ month中的错误:$运算符对原子向量无效 (我已经知道这个潜在的陷阱,但这
4回复

难以进行数据处理以填充R数据帧中的值

我手头似乎似乎很难向量化/加速问题。 我能够通过缓慢缩放的嵌套for循环解决此问题。 我正在使用的数据是NBA拥有数据,我正在对多个NBA赛季(100K-1M)行进行分析,这在嵌套循环中非常慢(数分钟)。 我创建了测试数据来突出问题: 此数据框中有6个唯一用户(1-6),其ID出现
3回复

将lm应用于由帧的第三列定义的数据帧的子集

我有一个包含x值向量,y值向量和ID向量的数据框: 我想为x的子集创建一个单独的lm,并且y共享相同的ID。 以下代码完成了工作: 除非这是非常脆弱的(未来的数据集可能有不同的ID)和未矢量化。 我还想将所有lms存储在单个数据结构中。 必须有一种优雅的方式来做到这一点,但
1回复

以矢量化方式从数据帧填写矩阵值

我有一个包含3列的数据帧,其中两列代表矩阵中的i,j索引。 对于数据帧的每一行,我想将矩阵中相应的i,j值填充为1。 在下面分享数据和矩阵,我认为这将更容易描述问题: i列是user_id,j列是item_id。 所以对于第一行,我想M [3219,174] = 1,然后我想M
1回复

给定条件并提高R中代码的效率,将值从另一个数据帧追加到一个数据帧

我有一个名为train的数据集,当两个数据集中的created_at属性和user_id属性都匹配时,我希望将这些值追加到total列中。 以下是我编写的代码。 但是,对于i=3 ,我得到错误: Error in x[...] <- m : replacement has len
1回复

调用函数根据参数汇总数据帧并将其应用于数据帧和nls

我正在使用天气数据和水电费帐单,并尝试估算非线性回归模型。 我想出一个问题。 我调用的用于计算天气统计信息的函数供暖和制冷天数(HDD和CDD)无法应用于数据框,而nls无法使用它。 显然,我缺少有关函数参数的明显信息。 有人可以指出我下面的HDD和CDD功能出了什么问题吗?
3回复

在R中,将函数应用于数据帧的行并返回数据帧

我试图将自编写的函数应用于数据帧的行。 实际数据框有数千行,这只是一个示例。 我的功能非常复杂并且做了很多事情,最后我得到DF的每一行新行。 让我们说简单来说,函数将1加1到第2列,第3列加到第3列(当然这可以是矢量化的,但我的函数,我们称之为Funct,做得更多)。 所以:
2回复

用累积频率有效地替换数据帧

我正在尝试编写一个占用大数据帧的程序,并用这些值的累积频率(按升序排序)替换每列值。 例如,如果值列为:5,8,3,5,4,3,8,5,5,1那么相对和累积频率为: 1:rel_freq = 0.1,cum_freq = 0.1 3:rel_freq = 0.2,cum_fr
3回复

使用数据帧列表和向量列表并行子集

这有效: 这不是: 为什么? 缺少一种在DF和memberid中的并行列中进行矢量化的明显方法(因此,当DF和memberid中都包含id时,我每年都只能得到行),我使用了for循环,但是我不太幸运能找到表达索引的正确方法...帮助吗? 示例数据: