根据其他列中的值,在数据框中创建具有递增值的新列

中提琴霍勒斯坦

我有一个非常长的数据框(超过30万行),包含一个任务的所有主题试验,采用长格式。因此,大约有300行是针对一个主题的连续试验,其次是其他主题。我想做的是创建一个新列,其中包含每个主题的试用编号。

如:

subject trial_number 101 1 101 2 101 3 102 1 102 2 102 3

我想我应该以某种方式使R从列主题中选择一个主题号,然后创建一个升序列表,然后将其循环到所有主题号上。但是我无法弄清楚如何遍历主题编号,同时又在这些主题的同一列中创建升序列表?我看到的创建新列的不同之处在于,它们全都是基于其他列中的计算或值,而对我而言,新列中的值不是基于另一列的计算或值。

我还考虑过根据主题编号将数据框拆分为较小的框,创建升序列表,然后再次合并它们?似乎是一种效率很低的方法吗?

我没有用于失败尝试的示例代码,因为我无法弄清楚如何构造它。我在想子集内部的某种组合还是有更好的解决方案,我的谷歌搜索技能还没有帮助我找到答案?

万维网

使用dplyr

library(dplyr)

dat2 <- dat %>%
  group_by(subject) %>%
  mutate(trial_number = 1:n()) %>%
  ungroup()
dat2
#   subject trial_number
#     <int>        <int>
# 1     101            1
# 2     101            2
# 3     101            3
# 4     102            1
# 5     102            2
# 6     102            3

要么

dat2 <- dat %>%
  group_by(subject) %>%
  mutate(trial_number = row_number()) %>%
  ungroup()
dat2
#   subject trial_number
#     <int>        <int>
# 1     101            1
# 2     101            2
# 3     101            3
# 4     102            1
# 5     102            2
# 6     102            3

要么 data.table

library(data.table)

setDT(dat)

dat[, trial_number := seq_len(.N), by = subject][]
   subject trial_number
1:     101            1
2:     101            2
3:     101            3
4:     102            1
5:     102            2
6:     102            3

rowidrowidvdata.table

library(data.table)

setDT(dat)

dat[, trail_number := rowidv(dat, cols = "subject")][]
#    subject trial_number
# 1:     101            1
# 2:     101            2
# 3:     101            3
# 4:     102            1
# 5:     102            2
# 6:     102            3

library(data.table)

setDT(dat)

dat[, trail_number := rowid(dat$subject)][]
#    subject trial_number
# 1:     101            1
# 2:     101            2
# 3:     101            3
# 4:     102            1
# 5:     102            2
# 6:     102            3

或与基础Rtapplyunlist

dat2 <- dat
dat2$trial_number <- unlist(tapply(dat$subject, dat$subject, seq_along))
dat2
#   subject trial_number
# 1     101            1
# 2     101            2
# 3     101            3
# 4     102            1
# 5     102            2
# 6     102            3

数据

dat <- read.table(text = "subject
    101
    101
    101
    102
    102
    102 ", header = TRUE)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据 julia 中的其他列值有条件地在数据框中创建新列

根据 R 中的其他列在数据框中创建新列

根据其他列中的答案选择在数据框中创建新列

使用其他数据框中的匹配值在数据框中创建新列

在数据框中创建一个新列,该列具有列表中该行的其他列的值

如何根据其他列的条件在数据框中创建新列?

如何在数据框中添加具有递增值的列,该值由全数字和另一列具有随机数组成

根据其他列值/ Pandas -Python 在数据框中创建 ID 列

根据其他列中的值在python 3(pandas)数据框中创建新列

根据其他数据框中的匹配值在数据框中创建新变量

如何在MySQL中从具有累积值的列中创建具有递增值的列?

根据具有多个值的其他列中的值创建新列

根据熊猫数据框中其他列的条件和值创建新列

根据其他两个数据框列中的值条件创建新列

根据现有数据框中的其他列创建一个新列

如何根据具有公共信息的不同数据框中另一列的值在数据框中创建新列?

根据其他列创建一个具有值的新列 - 在 R 中

如果列值具有多个值,则在数据框中创建新记录

根据其他2个数据框中的值创建新列

根据其他列中的值条件在数据框中跨列应用if语句

根据其他数据框中的列值在熊猫数据框中创建列

根据其他列的输入在数据框中创建一列

在数据框R中动态创建列,并根据其他列条件进行填充

根据其他列行中的过滤值,在pandas数据框中创建一个新列

根据同一熊猫数据框中其他列的值创建包含布尔值或NaN的新列

在数据框中创建一列,指示其他列中的值是否连续

根据Groupby和单独列中的值在数据框中创建新列

如何基于其他列的排列在数据框中创建新列?

根据 R 中数据框中所有其他列中的字符串值,使用 dplyr 创建一个新列