使用其他列的某些行中的值创建新列

优惠

我有一个看起来像这样的数据框:(示例已编辑)

df <- data.frame(Subject = c(rep("A", 9), rep("B", 8)),
Trial = c(1,1,2,3,4,4,5,6,6,1,2,2,3,4,5,5,6),
Feature_1 = c(rep(123, 2), 234, 345, rep(456, 2), 567, rep(678, 2), 831, rep(444, 2), 461, 921, rep(436, 2), 111),
Feature_2 = c(rep(321, 2), 543, 654, rep(765, 2), 876, rep(987, 2), 912, rep(302, 2), 900, 555, rep(382, 2), 197),
Feature_3 = c(rep(190, 2), 459, 392, rep(398, 2), 492, rep(587, 2), 761, rep(901, 2), 783, 312, rep(880, 2), 229),
Feature_correct = NA)

df
   Subject Trial Feature_1 Feature_2 Feature_3 Feature_correct
1        A     1       123       321       190              NA
2        A     1       123       321       190              NA
3        A     2       234       543       459              NA
4        A     3       345       654       392              NA
5        A     4       456       765       398              NA
6        A     4       456       765       398              NA
7        A     5       567       876       492              NA
8        A     6       678       987       587              NA
9        A     6       678       987       587              NA
10       B     1       831       912       761              NA
11       B     2       444       302       901              NA
12       B     2       444       302       901              NA
13       B     3       461       900       783              NA
14       B     4       921       555       312              NA
15       B     5       436       382       880              NA
16       B     5       436       382       880              NA
17       B     6       111       197       229              NA

我需要的是对Feature_correct列从包含的值Feature_n取决于Trial每个Subject所以:

主题A和试验1和2:Feature_correct分别包含Feature_1下的主题A和试验1和2的值。

主题A和试验3和4:Feature_correct分别包含Feature_2下主题A和试验3和4的值。

主题A和试验5和6:Feature_correct分别包含Feature_3下主题A和试验5和6的值。

以此类推。

这是我的目标:

df$Feature_goal <- c(rep(123, 2), 234, 654, rep(765, 2), 492, rep(587, 2), 831, rep(444, 2), 900, 555, rep(880, 2), 229)

head(df)
  Subject Trial Feature_1 Feature_2 Feature_3 Feature_correct Feature_goal
1       A     1       123       321       190              NA          123
2       A     1       123       321       190              NA          123
3       A     2       234       543       459              NA          234
4       A     3       345       654       392              NA          654
5       A     4       456       765       398              NA          765
6       A     4       456       765       398              NA          765

我知道如何手动执行此操作(在语法中指定主题名称和试用编号),但是我想创建一个循环(或其他可行的方法),这样就不必键入每个主题的名称(在我的真实数据集中,我有很多参与者和很多“功能”变量。

我已经尝试过此for循环,但出现错误:

df <- for(i in 1:nrow(df$Subject)) {
 if(df$Trial %in% c(1,2)){
   df[df$Subject == i $ df$Trial %in% c(1,2),]$Feature_correct = df[df$Subject == i & df$Trial %in% c(1,2),]$Feature_1
 }
  if(df$Trial %in% c(3,4)){
   df[df$Subject == i $ df$Trial %in% c(3,4),]$Feature_correct = df[df$Subject == i & df$Trial %in% c(3,4),]$Feature_2
  }
  if(df$Trial %in% c(5,6)){
   df[df$Subject == i $ df$Trial %in% c(5,6),]$Feature_correct = df[df$Subject == i & df$Trial %in% c(5,6),]$Feature_3
 }
}

> Error in 1:nrow(df$Subject) : argument of length 0

确实,

nrow(df$Subject)
> NULL

有谁知道如何进行此工作(通过循环或任何其他方式)?

罗纳克·沙

一种矢量化的方式是通过将带有Trial数字的“功能”粘贴match列具有原始数据帧的名称和子集值的“功能”来创建行/列索引

df$Feature_Goal <- df[cbind(seq_len(nrow(df)), 
                      match(paste0("Feature_", df$Trial), names(df)))]
df

#   Subject Trial Feature_1 Feature_2 Feature_3 Feature_correct Feature_Goal
#1        A     1       123       321       190              NA          123
#2        A     1       123       321       190              NA          123
#3        A     2       234       543       459              NA          543
#4        A     2       234       543       459              NA          543
#5        A     3       345       654       392              NA          392
#6        A     3       345       654       392              NA          392
#7        B     1       456       765       398              NA          456
#8        B     1       456       765       398              NA          456
#9        B     2       567       876       492              NA          876
#10       B     2       567       876       492              NA          876
#11       B     3       678       987       587              NA          587
#12       B     3       678       987       587              NA          587

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用其他列的某些行中的值创建新列

来自分类Dev

使用其他行中的值在DataFrame中创建新列

来自分类Dev

熊猫使用其他列中的值创建新列,并根据列值进行选择

来自分类Dev

使用其他列中的某些值创建列-有条件的

来自分类Dev

使用其他列中的某些值创建列-有条件的

来自分类Dev

根据其他列中的NA值创建新列

来自分类Dev

根据其他列中的值创建新列

来自分类Dev

基于行中的列值以及df中其他行中的列值创建新列?

来自分类Dev

如何使用其他多个列中的所有非NA值创建新列?

来自分类Dev

如何添加复制某些列但在其他列中分配新值的新行

来自分类Dev

通过查找其他行中的值来创建新的pandas数据框列

来自分类Dev

Pandas:使用来自其他行的值创建新列

来自分类Dev

根据其他行中的重复项创建新列

来自分类Dev

如果行下方重复,请使用其他列中的值,直到找到新值

来自分类Dev

当其他任何几列中的值均为TRUE(或1)时,使用mutate()创建新列

来自分类Dev

熊猫:使用其他列子组中的值创建新列

来自分类Dev

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

来自分类Dev

Python Pandas:基于组内的最大值创建新列,但使用其他(字符串)列中的值

来自分类Dev

熊猫-创建新列,该列的值取自同一数据框中的其他行

来自分类Dev

根据其他列中的某些值创建另一列

来自分类Dev

从其他列创建新的特定值列

来自分类Dev

如何在R中的数据框中使用其他方式更改某些行和列中的值?

来自分类Dev

通过添加其他列中的值在Panda数据框中创建新列

来自分类Dev

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

来自分类Dev

通过使用列表理解遍历多个其他列中的每一行来创建 2 个新列

来自分类Dev

如何使用函数使用其他列值创建新的数据框列?

来自分类Dev

从后面n行的其他列数据创建新列

来自分类Dev

如何基于其他列的值在data.table中创建新列

来自分类Dev

如何用熊猫中其他列的.size()值创建新列?

Related 相关文章

  1. 1

    使用其他列的某些行中的值创建新列

  2. 2

    使用其他行中的值在DataFrame中创建新列

  3. 3

    熊猫使用其他列中的值创建新列,并根据列值进行选择

  4. 4

    使用其他列中的某些值创建列-有条件的

  5. 5

    使用其他列中的某些值创建列-有条件的

  6. 6

    根据其他列中的NA值创建新列

  7. 7

    根据其他列中的值创建新列

  8. 8

    基于行中的列值以及df中其他行中的列值创建新列?

  9. 9

    如何使用其他多个列中的所有非NA值创建新列?

  10. 10

    如何添加复制某些列但在其他列中分配新值的新行

  11. 11

    通过查找其他行中的值来创建新的pandas数据框列

  12. 12

    Pandas:使用来自其他行的值创建新列

  13. 13

    根据其他行中的重复项创建新列

  14. 14

    如果行下方重复,请使用其他列中的值,直到找到新值

  15. 15

    当其他任何几列中的值均为TRUE(或1)时,使用mutate()创建新列

  16. 16

    熊猫:使用其他列子组中的值创建新列

  17. 17

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

  18. 18

    Python Pandas:基于组内的最大值创建新列,但使用其他(字符串)列中的值

  19. 19

    熊猫-创建新列,该列的值取自同一数据框中的其他行

  20. 20

    根据其他列中的某些值创建另一列

  21. 21

    从其他列创建新的特定值列

  22. 22

    如何在R中的数据框中使用其他方式更改某些行和列中的值?

  23. 23

    通过添加其他列中的值在Panda数据框中创建新列

  24. 24

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

  25. 25

    通过使用列表理解遍历多个其他列中的每一行来创建 2 个新列

  26. 26

    如何使用函数使用其他列值创建新的数据框列?

  27. 27

    从后面n行的其他列数据创建新列

  28. 28

    如何基于其他列的值在data.table中创建新列

  29. 29

    如何用熊猫中其他列的.size()值创建新列?

热门标签

归档