R提供了两种不同的方法来访问列表或data.frame- []和[[]]运算符的元素.
两者有什么区别?在什么情况下我应该使用一个而不是另一个?
我有一个我要合并的许多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)
(很明显,我在其他地方看到了其他对此错误的引用而没有解决方案).
有什么方法可以解决这个问题吗?
假设我们在目录C:\ R\Data中有文件file1.csv,file2.csv,...和file100.csv,我们希望将它们全部读入单独的数据框(例如file1,file2,...和file100).
这样做的原因是,尽管具有相似的名称,但它们具有不同的文件结构,因此将它们放在列表中并不是很有用.
我可以使用lapply但返回包含100个数据帧的单个列表.相反,我想在全球环境中使用这些数据框.
如何直接将多个文件读入全局环境?或者,或者,如何将数据框列表的内容解压缩到其中?
是否有可能以一种简单的方式将大量数据框放入列表中?意思是代替必须手动编写每个名称,如下所示:
list_of_df <- list(data_frame1,data_frame2,data_frame3, ....)
Run Code Online (Sandbox Code Playgroud)
我将所有数据框都加载到我的工作空间中.我将使用列表循环所有数据帧(对每个数据帧执行相同的操作).
我是第一次使用data.table.
我的桌子上有一个大约400,000年的专栏.我需要将它们从出生日期转换为年龄.
做这个的最好方式是什么?
我想在循环中创建一个字符串,并在此循环中将此字符串用作对象。这是一个简化的示例:
for (i in 1:2) {
x <- paste("varname",i, sep="")
x <- value
}
Run Code Online (Sandbox Code Playgroud)
循环应创建varname1,varname2。然后,我想使用varname1,varname2作为对象来分配值。我尝试了paste(),print()等。感谢您的帮助!
我有一个经常出现的情况,我在一组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) 我马上给出一个例子,现在假设我有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代码你的代码它更可取.但是来自任何语言的算法都非常受欢迎.
我是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)
我的档案很大.我没有一定数量的团体.它需要只是列名的开头.
我正在尝试使用 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)
这没用。有没有更简单的方法来做到这一点?谢谢!!