相关疑难解决方法(0)

用于访问列表或数据框元素的方括号[]和双括号[[]]之间的区别

R提供了两种不同的方法来访问列表或data.frame- [][[]]运算符的元素.

两者有什么区别?在什么情况下我应该使用一个而不是另一个?

r extract list dataframe r-faq

490
推荐指数
10
解决办法
21万
查看次数

同时合并列表中的多个data.frames

我有一个我要合并的许多data.frames的列表.这里的问题是每个data.frame在行数和列数方面都不同,但它们都共享关键变量(我已经调用过"var1","var2"在下面的代码中).如果data.frames在列方面是相同的,我只能rbind,plyr的rbind.fill可以完成这项工作,但这些数据并非如此.

因为该merge命令仅适用于2个data.frames,所以我转向Internet寻求创意.我从这里得到了这个,它在R 2.7.2中完美运行,这是我当时所拥有的:

merge.rec <- function(.list, ...){
    if(length(.list)==1) return(.list[[1]])
    Recall(c(list(merge(.list[[1]], .list[[2]], ...)), .list[-(1:2)]), ...)
}
Run Code Online (Sandbox Code Playgroud)

我会像这样调用函数:

df <- merge.rec(my.list, by.x = c("var1", "var2"), 
                by.y = c("var1", "var2"), all = T, suffixes=c("", ""))
Run Code Online (Sandbox Code Playgroud)

但是在2.7.2之后的任何R版本中,包括2.11和2.12,此代码失败并出现以下错误:

Error in match.names(clabs, names(xi)) : 
  names do not match previous names
Run Code Online (Sandbox Code Playgroud)

(很明显,我在其他地方看到了其他对此错误的引用而没有解决方案).

有什么方法可以解决这个问题吗?

merge r list dataframe r-faq

233
推荐指数
6
解决办法
15万
查看次数

将多个CSV文件读入单独的数据框

假设我们在目录C:\ R\Data中有文件file1.csv,file2.csv,...和file100.csv,我们希望将它们全部读入单独的数据框(例如file1,file2,...和file100).

这样做的原因是,尽管具有相似的名称,但它们具有不同的文件结构,因此将它们放在列表中并不是很有用.

我可以使用lapply但返回包含100个数据帧的单个列表.相反,我想在全球环境中使用这些数据框.

如何直接将多个文件读入全局环境?或者,或者,如何将数据框列表的内容解压缩到其中?

csv r file lapply

29
推荐指数
6
解决办法
6万
查看次数

将多个数据框放入列表(智能方式)

是否有可能以一种简单的方式将大量数据框放入列表中?意思是代替必须手动编写每个名称,如下所示:

list_of_df <- list(data_frame1,data_frame2,data_frame3, ....)
Run Code Online (Sandbox Code Playgroud)

我将所有数据框都加载到我的工作空间中.我将使用列表循环所有数据帧(对每个数据帧执行相同的操作).

loops r list dataframe

18
推荐指数
3
解决办法
2万
查看次数

将出版日期中的列更改为r中的年龄

我是第一次使用data.table.

我的桌子上有一个大约400,000年的专栏.我需要将它们从出生日期转换为年龄.

做这个的最好方式是什么?

r date-of-birth

11
推荐指数
3
解决办法
3万
查看次数

在R中的循环中将字符串视为对象名称

我想在循环中创建一个字符串,并在此循环中将此字符串用作对象。这是一个简化的示例:

for (i in 1:2) {
  x <- paste("varname",i, sep="")
  x <- value
}
Run Code Online (Sandbox Code Playgroud)

循环应创建varname1,varname2。然后,我想使用varname1,varname2作为对象来分配值。我尝试了paste(),print()等。感谢您的帮助!

string loops r object

8
推荐指数
2
解决办法
7669
查看次数

如何更改数据框的名称

我有一个经常出现的情况,我在一组R代码的顶部设置了一个值,该代码用于对一个或多个数据帧进行子集化.像这样的东西:

city_code <- "202"
Run Code Online (Sandbox Code Playgroud)

在整个过程结束时,我想将结果保存在一个适当命名的数据框中,比如说,基于将"city_code"附加到公共存根.

city_results <- paste("city_stats", city_code, sep = "")
Run Code Online (Sandbox Code Playgroud)

我的问题是我无法弄清楚如何将结果数据框重命名为'city_results'的值.有很多关于如何重命名数据框列的信息,但没有关于如何重命名数据框本身的信息.基于提出的答案,这里有一个澄清:

谢谢,@迈克明智.有助于学习哈德利的高级R,手头有一个具体的问题.

library(dplyr)
gear_code <- 4
gear_subset <- paste("mtcars_", gear_code, sep = "")
mtcars_subset <- mtcars %>% filter(gear == gear_code)
head(mtcars_subset)
write.csv(mtcars_subset, file = paste(gear_subset, ".csv", sep = ""))
Run Code Online (Sandbox Code Playgroud)

这让我可以将子集写入适当命名的csv文件.但是,您的建议有点可行,但我不能,例如,使用新名称引用data.frame:

assign(gear_subset, mtcars_subset)
head(gear_subset)
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr

7
推荐指数
1
解决办法
7万
查看次数

如何在多个阵列中找到连续数?

我马上给出一个例子,现在假设我有3个数组a,b,c等

a = c(3,5)
b = c(6,1,8,7)
c = c(4,2,9)
Run Code Online (Sandbox Code Playgroud)

我必须能够在它们之间提取连续的三元组,例如,

c(1,2,3),c(4,5,6)
Run Code Online (Sandbox Code Playgroud)

但这仅仅是一个例子,我将拥有一个甚至超过10个数组的更大的数据集,因此必须能够找到连续的十个长度系列.

因此,任何人都可以提供算法,通常在'n'数组中找到连续的长度'n'系列.

我实际上在R中做这个东西,所以如果你用R代码你的代码它更可取.但是来自任何语言的算法都非常受欢迎.

arrays algorithm r permutation number-theory

7
推荐指数
2
解决办法
222
查看次数

按列名将data.frame拆分为组

我是R.的新手.我有一个数据框,其列名是这样的:

file_001   file_002   block_001   block_002   red_001   red_002 ....etc'  
  0.05       0.2        0.4         0.006       0.05       0.3
  0.01       0.87       0.56        0.4         0.12       0.06
Run Code Online (Sandbox Code Playgroud)

我想通过列名将它们分成组,以获得如下结果:

group_file
file_001   file_002
  0.05       0.2
  0.01       0.87

group_block
block_001   block_002
  0.4        0.006
  0.56       0.4

group_red
red_001    red_002
  0.05       0.3
  0.12       0.06

...etc'
Run Code Online (Sandbox Code Playgroud)

我的档案很大.我没有一定数量的团体.它需要只是列名的开头.

r strsplit dataframe

5
推荐指数
1
解决办法
1220
查看次数

关于 bind_rows() 的非常简单但令人困惑的 R 问题

我正在尝试使用 bind_rows 将多个数据帧合并为一个数据帧。每个数据框具有相同的列名和长度。假设每个数据帧都被命名为“df”,其中有 100 个。所以 df1, df2, df3 ... df100。

我不想将函数中的每个数据帧都写为 bind_rows(df1, df2 ... df100)。我试过

total_df <- bind_rows(paste0(df1:df100))
Run Code Online (Sandbox Code Playgroud)

这没用。有没有更简单的方法来做到这一点?谢谢!!

r dplyr

5
推荐指数
1
解决办法
87
查看次数