【问题标题】:R: Column Heading ConversionsR:列标题转换
【发布时间】:2019-12-30 08:59:05
【问题描述】:

我有以下数据集。我的目标是了解这两种地点的数量以及哺乳动物和鸟类的数量。

df1:

Location Type  Cat  Mouse Dog Chicken Turkey Horse
1              1    0     0   1       0      1  
1              0    0     1   0       1      0   
2              1    1     1   1       1      1 
2              0    1     0   0       0      0 
1              1    1     0   0       1      0

我希望它读作

df2:
Location Type  M    M     M   B       B      M
1              1    0     0   1       0      1  
1              0    0     1   0       1      0   
2              1    1     1   1       1      1 
2              0    1     0   0       0      0 
1              1    1     0   0       1      0

“M”表示哺乳动物,“B”表示鸟类

我尝试手动将数据输入到我的 .csv 文件中并在 R 中使用它,但是,文件被读取为

df2:
 Location Type     M    M1    M2  B       B1     M3
    1              1    0     0   1       0      1  
    1              0    0     1   0       1      0   
    2              1    1     1   1       1      1 
    2              0    1     0   0       0      0 
    1              1    1     0   0       1      0

我不确定为什么每个“M”或“B”列都单独编号,我该如何防止这种情况发生

我还在另一个数据框中将动物类型归类为哺乳动物和鸟类,如下所示

dfanimal:    
Name of Animal Mammal/Bird
    Cat            Mammal
    Dog            Mammal
    Mouse          Mammal
    Chicken        Bird
    Turkey         Bird
    Horse          Mammal

如果有办法让我直接使用数据框 df1 和 dfanimal?

非常感谢您的帮助。

【问题讨论】:

    标签: r csv multiple-columns


    【解决方案1】:

    手动更改列名后,您可以在导入 csv 时使用check.names = FALSE。由于不建议在数据框中使用重复的列名,这些后缀默认由 R 添加。

    df1 <- read.csv('location/of/file.csv', check.names = FALSE)
    

    如果你想使用df_animal改变列名,我们可以使用match

    names(df1)[-1] <- substr(df_animal$Mammal.Bird[match(names(df1)[-1], 
                             df_animal$Name_of_Animal)], 1, 1)
    
    df1
    #  Location M M M B B M
    #1        1 1 0 0 1 0 1
    #2        1 0 0 1 0 1 0
    #3        2 1 1 1 1 1 1
    #4        2 0 1 0 0 0 0
    #5        1 1 1 0 0 1 0
    

    数据

    df1 <- structure(list(Location = c(1L, 1L, 2L, 2L, 1L), Cat = c(1L, 
    0L, 1L, 0L, 1L), Mouse = c(0L, 0L, 1L, 1L, 1L), Dog = c(0L, 1L, 
    1L, 0L, 0L), Chicken = c(1L, 0L, 1L, 0L, 0L), Turkey = c(0L, 
    1L, 1L, 0L, 1L), Horse = c(1L, 0L, 1L, 0L, 0L)), class = "data.frame", 
    row.names = c(NA, -5L))
    
    df_animal <- structure(list(Name_of_Animal = structure(c(1L, 3L, 5L, 2L, 6L, 
    4L), .Label = c("Cat", "Chicken", "Dog", "Horse", "Mouse", "Turkey"
    ), class = "factor"), Mammal.Bird = structure(c(2L, 2L, 2L, 1L, 
    1L, 2L), .Label = c("Bird", "Mammal"), class = "factor")), class = "data.frame", 
    row.names = c(NA, -6L))
    

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多