【问题标题】:How to add column to dataframe with unequal length in R如何在R中将列添加到长度不等的数据框中
【发布时间】:2022-06-29 23:31:27
【问题描述】:

我有一个 data.frame,我想根据另一列的模式添加一个额外的列,但数字列表的长度不相等。

class(mylist)
[1] "numeric"

mylist 
 [1]  90 100  97 100  93 100  90 100 100 100 100 100 100 100  96 100 100 100 100 100

这是我的data.frame,我只是展示了一部分

df[16:26,]
# A tibble: 11 × 9
   parent  node branch.length label     isTip      x     y  branch angle
    <int> <int>         <dbl> <chr>     <lgl>  <dbl> <dbl>   <dbl> <dbl>
 1     30    16     0.0000117 sample-59 TRUE  0.0213 15    0.0213  257. 
 2     39    17     0.0000179 sample-62 TRUE  0.0213  4    0.0213   68.6
 3     32    18     0.0000212 sample-63 TRUE  0.0213  3    0.0213   51.4
 4     40    19     0.0000147 sample-68 TRUE  0.0213  5    0.0213   85.7
 5     40    20     0.0000147 sample-69 TRUE  0.0213  6    0.0213  103. 
 6     28    21     0.00630   sample-5  TRUE  0.0213 11    0.0181  189. 
 7     22    22     0         NA        FALSE 0       8.20 0       140. 
 8     22    23     0.0143    NA        FALSE 0.0143 13.9  0.00715 239. 
 9     22    24     0.0129    NA        FALSE 0.0129  2.47 0.00645  42.3
10     24    25     0.000115  NA        FALSE 0.0130  3.94 0.0130   67.5
11     25    26     0.00241   NA        FALSE 0.0154  5.88 0.0142  101.

所以,我想将 mylist 添加到数据框的末尾,但仅限于那些在 isTip 列中为 FALSE 的行。

我通常这样做:

过滤器

dfisTip <- filter(df, isTip == FALSE)

将列表添加为列 (btp)

dfisTip$btp <- mylist

并加入数据框

df <- left_join(df, dfisTip)
Joining, by = c("parent", "node", "branch.length", "label", "isTip", "x", "y", "branch", "angle")



df[16:26, ]
# A tibble: 11 × 10
   parent  node branch.length label     isTip      x     y  branch angle   btp
    <int> <int>         <dbl> <chr>     <lgl>  <dbl> <dbl>   <dbl> <dbl> <dbl>
 1     30    16     0.0000117 sample-59 TRUE  0.0213 15    0.0213  257.     NA
 2     39    17     0.0000179 sample-62 TRUE  0.0213  4    0.0213   68.6    NA
 3     32    18     0.0000212 sample-63 TRUE  0.0213  3    0.0213   51.4    NA
 4     40    19     0.0000147 sample-68 TRUE  0.0213  5    0.0213   85.7    NA
 5     40    20     0.0000147 sample-69 TRUE  0.0213  6    0.0213  103.     NA
 6     28    21     0.00630   sample-5  TRUE  0.0213 11    0.0181  189.     NA
 7     22    22     0         NA        FALSE 0       8.20 0       140.     90
 8     22    23     0.0143    NA        FALSE 0.0143 13.9  0.00715 239.    100
 9     22    24     0.0129    NA        FALSE 0.0129  2.47 0.00645  42.3    97
10     24    25     0.000115  NA        FALSE 0.0130  3.94 0.0130   67.5   100
11     25    26     0.00241   NA        FALSE 0.0154  5.88 0.0142  101.     93

isTip 列中为 TRUE 的行在 btp 列中为 NA,FALSE 为编号!!

我只是想知道是否还有其他简单的方法可以做到这一点????

谢谢!!!

【问题讨论】:

  • 我强烈建议您不要将常规原子向量称为“列表”。 list 是它自己的类,调用非列表列表会造成混乱。

标签: r dataframe


【解决方案1】:

你是对的 - 没有必要拆分和重新加入数据。以下是 iris 数据集的示例:

data("iris")

vector_length_virginica  <- c(1:50)
iris$newcol[iris$Species=="virginica"]  <- vector_length_virginica

现在新列newcol 包含向量(非列表)vector_length_virginica 的值,其中Species=="viriginica"),该列中的其余值是NA

【讨论】:

    【解决方案2】:

    我们通常使用data[rows, columns] 索引数据帧。如果您只想将mylist 分配给isTip == FALSE 所在的行,那么您可以这样做:

    df[isTip == FALSE, "btp"] <- mylist
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 2016-12-01
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      相关资源
      最近更新 更多