根据列表变量设置多个数据帧的名称

时间:2018-02-09 11:44:12

标签: r dataframe lapply names

我有一个以相同方式构建的多个数据框列表。我想将每个数据框的1列的名称更改为数据框本身的名称,并附加一些文本。从几个不同的答案,我认为lapply和列表上的工作将是最好的方式。

示例数据:

df1 <- data.frame(A = 1, B = 2, C = 3)
df2 <- data.frame(A = 1, B = 2, C = 3)
dfList <- list(df1,df2)

col1 <- names(dfList)

df<-lapply(dfList, function(x) {
names(x)[1:2] <- c(col1[1:length(col1)]"appended text","Col2","Col3");x
})

问题似乎是在&#34; col1&#34;中调用正确的条目。我的代码中每个数据框的变量。 关于如何正确处理/表达这一点的任何想法?非常感谢!

4 个答案:

答案 0 :(得分:2)

...
}
else
{
    std::cin.ignore();  // discard chars until eof or 1 char extracted
    std::cin >> std::noskipws >> symb; 
}
// now treat sym is whitspace 

答案 1 :(得分:2)

以下是tidyverse

的一个选项
library(tidyverse)
map(dfList, ~ .x %>%
                rename(Aappended_text = A))

如果这是基于列索引,请创建一个函数

fName <- function(lst, new_name, index){
      map(lst, ~ 
               .x %>%
                  rename_at(index, funs(paste0(., new_name))))

 }

fName(dfList, "appended_text", 1)

答案 2 :(得分:0)

我不确定我是否完全理解你的问题,但这是你以后的事情:

df1 <- data.frame(A = 1, B = 2, C = 3)
df2 <- data.frame(A = 1, B = 2, C = 3)
dfList <- list(df1,df2)

df <- lapply(dfList, function(x) {
  colnames(x) <- c(paste0(colnames(x)[1], "appended text"), colnames(x)[2:length(colnames(x))])
  return(x)
})

输出:

> df
[[1]]
  Aappended text B C
1              1 2 3

[[2]]
  Aappended text B C
1              1 2 3

答案 3 :(得分:0)

您只需使用lapply(dfList, function(x) { names(x)[1L] <- "some text" x })

即可
dfList <- list(df1 = df1, df2 = df2)

但是,如果要按列表中数据框元素的名称重命名,首先需要为它们命名,例如: lapply(x, ...并且您无法使用lapply直接访问它们,因此您需要通过索引lapply(seq_along(dfList), function(i) { names(dfList[[i]])[1L] <- names(dfList[i]) dfList[[i]] }) 覆盖列表,例如:

$json = file_get_contents('./data/example.json');
$data = json_decode($json, true);

foreach ($data as $uniqueId => $array) {
    $data = $array['data'];
    $more_data = $array['more_data'];

    // go bananas here
}