首页 > 解决方案 > 如何更改列表中数据框的某些元素的名称

问题描述

我在一个列表中有几个数据框,以便我可以一次将函数应用于每个数据框;下面是一些模拟数据

df1 <- data.frame(spp = c("Rubsp", "Rusp", "Cest", "Ceor", "Dagl"),
                 julian = c(60, 70, 80, 90, 100))
df2 <- data.frame(spp = c("Sosp", "Spsp", "Cest", "Umsp", "Dagl"),
                  julian = c(60, 70, 80, 90, 100))
df3 <- data.frame(spp = c("Syal", "Syla", "Cest", "Umsp", "Ceor"),
                  julian = c(60, 70, 80, 90, 100))

spp_list <- list(df1=df1, df2=df2, df3=df3)

我正在尝试创建一个函数来更改数据框中某些物种名称的一些拼写错误。例如,“Rubsp”需要是“Rusp”。下面是我对这个功能的尝试。

change_spp <- function(df){
  (df[["spp"]] == "Rubsp") -> "Rusp"
  (df[["spp"]] == "Sosp") -> "Spsp"
  (df[["spp"]] == "Syal") -> "Syla"
  return(df)
}

spp_list <- lapply(spp_list, change_spp)

当我将此函数应用于我的数据框列表时,没有任何变化。我无法找出正确的语法来修复这些名称。

使用 R 版本 4.0.2,Mac OS X 10.13.6

标签: rlistfunctiondataframe

解决方案


尝试这个:

#Function
change_spp <- function(df){
  df$spp[df$spp== "Rubsp"] <- "Rusp"
  df$spp[df$spp== "Sosp"] <- "Spsp"
  df$spp[df$spp== "Syal"] <- "Syla"
  return(df)
}
#Apply
spp_list <- lapply(spp_list, change_spp)

输出:

spp_list
$df1
   spp julian
1 Rusp     60
2 Rusp     70
3 Cest     80
4 Ceor     90
5 Dagl    100

$df2
   spp julian
1 Spsp     60
2 Spsp     70
3 Cest     80
4 Umsp     90
5 Dagl    100

$df3
   spp julian
1 Syla     60
2 Syla     70
3 Cest     80
4 Umsp     90
5 Ceor    100

您的方法需要这样的东西才能工作(索引):

#Function
change_spp <- function(df){
  df$spp[df[["spp"]] == "Rubsp"] <- "Rusp"
  df$spp[df[["spp"]] == "Sosp"] <- "Spsp"
  df$spp[df[["spp"]] == "Syal"] <- "Syla"
  return(df)
}
#Apply
spp_list2 <- lapply(spp_list, change_spp)

相同的输出。


推荐阅读