标签: rbind

在R中导入和rbind具有通用名称的多个csv文件

我有多个CSV文件,其名称中包含4个常用字符.我想知道如何使用相同的常用字符来处理文件.例如,"AM-25"在3个csv文件的名称中是常见的,而"BA-35"在另一个2的名称中是常见的.

文件类似于AM-25.myfiles.2000.csv,AM-25.myfiles.2001.csv,AM-25.myfiles.2002.csv,BA-35.myfiles.2000.csv,BA-35.myfiles .2001.csv,我用这个来读取所有文件:

files <- list.files(path=".", pattern="xyz+.csv", all.files = FALSE,full.names=TRUE )
Run Code Online (Sandbox Code Playgroud)

r dataframe rbind

3
推荐指数
1
解决办法
5086
查看次数

需要在R中按行绑定列表数据

我在R中按行绑定列表时遇到问题.我的列表数据集是:

id:1
data$k: 1
id k b c
1 1 1 3
----------------
data$k: 2
id k b c
1 2 1 4
--------------
id:2
data$k: 1
id k b c
2 1 1 6
----------------
data$k: 2
id k b c
2 2 5 10
Run Code Online (Sandbox Code Playgroud)

我想要的是:

id k b c
1 1 1 3
1 2 1 4
2 1 1 6
2 2 5 10
Run Code Online (Sandbox Code Playgroud)

谢谢!

r list rbind

3
推荐指数
1
解决办法
5411
查看次数

用lapply替换for循环中的rbind?(地狱的第二圈)

我在优化一段R代码时遇到了麻烦.以下示例代码应说明我的优化问题:

一些初始化和函数定义:

a <- c(10,20,30,40,50,60,70,80)
b <- c(“a”,”b”,”c”,”d”,”z”,”g”,”h”,”r”)
c <- c(1,2,3,4,5,6,7,8)
myframe <- data.frame(a,b,c)
values <- vector(length=columns)
solution <- matrix(nrow=nrow(myframe),ncol=columns+3)

myfunction <- function(frame,columns){
athing = 0
   if(columns == 5){
   athing = 100
   }
   else{
   athing = 1000
   }
value[colums+1] = athing
return(value)}
Run Code Online (Sandbox Code Playgroud)

有问题的for循环看起来像这样:

columns = 6
for(i in 1:nrow(myframe){
   values <- myfunction(as.matrix(myframe[i,]), columns)
   values[columns+2] = i
   values[columns+3] = myframe[i,3]
   #more columns added with simple operations (i.e. sum)

   solution <- rbind(solution,values)
   #solution is a large matrix from outside the for-loop
} …
Run Code Online (Sandbox Code Playgroud)

optimization for-loop r lapply rbind

3
推荐指数
1
解决办法
6345
查看次数

我如何理解rbind的警告?

如果我有两个具有相同列名的data.frames,我可以使用rbind创建一个数据帧.但是,如果我有一个是因素而另一个是int,我会收到如下警告:

警告消息:In [<-.factor(*tmp*,ri,value = c(1L,1L,0L,0L,0L,1L,1L,:无效因子级别,NA生成

以下是问题的简化:

t1 <- structure(list(test = structure(c(1L, 1L, 2L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L), .Label = c("False", "True"), class = "factor")), .Names = "test", row.names = c(NA, 
-10L), class = "data.frame")
t2 <- structure(list(test = c(1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L
)), .Names = "test", row.names = c(NA, -10L), class = "data.frame")
rbind(t1, t2)
Run Code Online (Sandbox Code Playgroud)

使用单列,这很容易理解,但当它是十几个或更多因素的一部分时,它可能很难.有什么警告信息告诉我要查看哪一列?除此之外,了解哪一列错误的好方法是什么?

r rbind

3
推荐指数
1
解决办法
592
查看次数

如何在rbind中自动命名列?

我经常使用相同的变量rbind向量:

v1 = 1
v2 = 2
rbind(c(v1, v2), c(v1, v2))
     [,1] [,2]
[1,]    1    2
[2,]    1    2
Run Code Online (Sandbox Code Playgroud)

我知道我可以明确地命名向量列,但是当你有很多变量时,它是相当繁琐和多余的:

rbind(c(v1 = v1, v2 = v2), c(v1= v1, v2 = v2))
     v1 v1
[1,]  1  2
[2,]  1  2
Run Code Online (Sandbox Code Playgroud)

如何指示rbind()使用变量名来命名每一列?

r rbind

3
推荐指数
1
解决办法
1217
查看次数

合并具有相同列数的数据帧

我的第一个数据框(一个较大的数据框)有10行13列.第二个具有4行13列(所有除了MonthNA秒.

当我尝试rbind他们时,我得到下一个错误:

Error in rbind(deparse.level, ...) : replacement has length zero
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚是什么问题,因为它们都有相同的列名.

dput:

    dput(sample.df)
structure(list(Month = structure(c(8674, 8552, 8401, 8491, 8521, 
8460, 8644, 8432, 8705, 8582), class = "Date"), Intention_CDU = c(211L, 
240L, 246L, 232L, 261L, 222L, 234L, 223L, 249L, 241L), Intention_SPD = structure(list(
    Intention_SPD = c(296L, 290L, 304L, 274L, 238L, 276L, 284L, 
    323L, 324L, 291L)), .Names = "Intention_SPD", row.names = c(9L, 
6L, 1L, 4L, 5L, 3L, 8L, 2L, 10L, 7L), class = "data.frame"), …
Run Code Online (Sandbox Code Playgroud)

r rbind

3
推荐指数
1
解决办法
1794
查看次数

使用rbind()将多个数据帧组合成lapply()中的一个更大的data.frame

我正在使用R-Studio 0.99.491和R版本3.2.3(2015-12-10).我是R的相对新手,我会感激一些帮助.我正在做一个项目,我正在尝试使用旧媒体服务器上的服务器日志来识别服务器中的哪些文件夹/文件仍然被访问,哪些不是,因此我的团队知道要迁移哪些文件.每个日志是24小时,我有大约一年的日志,所以理论上,我应该能够看到过去一年的所有访问.

我理想的输出是获得一个树结构或绘图,它将显示我们服务器上正在使用的文件夹.我已经想出如何将一个日志(一天)读入R作为data.frame,然后使用R中的data.tree包将其转换为树.现在,我想逐步遍历目录中的所有文件,并在创建树之前将它们添加到原始data.frame中.这是我目前的代码:

#Create the list of log files in the folder
files <- list.files(pattern = "*.log", full.names = TRUE, recursive = FALSE)
#Create a new data.frame to hold the aggregated log data
uridata <- data.frame()
#My function to go through each file, one by one, and add it to the 'uridata' df, above
lapply(files, function(x){
    uriraw <- read.table(x, skip = 3, header = TRUE, stringsAsFactors = FALSE)
    #print(nrow(uriraw)
    uridata <- rbind(uridata, uriraw)
    #print(nrow(uridata))
})
Run Code Online (Sandbox Code Playgroud)

问题在于,无论我尝试什么,lapply循环中的'uridata'的值似乎都不会保存/传递到lapply循环之外,但每次循环运行时都会被覆盖.因此,我只获取最后一个'uriraw'文件的内容,而不是获取一个大数据框架.(这就是为什么在循环中有这两个注释的打印命令;我每次循环运行时都在测试数据帧中有多少行.)

谁能澄清我做错了什么?同样,我想在最后组合一个大数据框,它将文件夹中每个(当前七个)日志文件的内容组合在一起.

r lapply dataframe rbind read.table

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

有条件地向 data.frame 添加行

data.frame在植物中种植了大量鲜花和水果,进行了 30 年的调查。我想在某些行中添加零 (0),这些行代表植物没有flowersfruits(因为它是季节性物种)的特定月份中的个体。

例子:

Year Month Flowers Fruits
2004 6      25      2
2004 7      48      4
2005 7      20      1
2005 8      16      1
Run Code Online (Sandbox Code Playgroud)

我想添加不包含在零值中的月份,所以我想在一个函数中识别缺失的月份并用 0 填充它们。

谢谢。

conditional r function rows rbind

3
推荐指数
1
解决办法
1794
查看次数

data.table/data.frame rbind不能正常工作

我正在使用data.table 1.9.6.这是一些简单的代码和输出:

df <- data.table(a=c(NA,NA,2,2),b=c(1,1,2,2))
nrow(df[is.na(a)]) + nrow(df[!is.na(a)])
# [1] 4
nrow(rbind(df[is.na(a)],df[!is.na(a)]))
# [1] 4
nrow(rbind(df[is.na(a),b := a],df[!is.na(a)]))
# [1] 6
rbind(df[is.na(a),b := a],df[!is.na(a)])
#     a  b
# 1: NA NA
# 2: NA NA
# 3:  2  2
# 4:  2  2
# 5:  2  2
# 6:  2  2
rbind(df[is.na(a),a := b],df[!is.na(a)])
#     a  b
# 1: NA NA
# 2: NA NA
# 3:  2  2
# 4:  2  2
# 5:  2  2
# 6:  2 …
Run Code Online (Sandbox Code Playgroud)

r dataframe rbind data.table

3
推荐指数
1
解决办法
391
查看次数

将多个.csv文件合并为一个

我知道这个问题已经被问过多次了,但是尽管尝试应用上述解决方案,但我还是无法解决我的小问题:

我已经保存了所有要合并到一个文件夹中的.csv文件:

> file_list <- list.files()
> file_list[]
[1] "SR-einfam.csv"           "SR-garage.csv"           "SR-hotel.csv"           
[4] "SR-IndustrieGewerbe.csv" "SR-mehrfam.csv"          "SR-OffG.csv"  
Run Code Online (Sandbox Code Playgroud)

我使用do.calltio将它们全部合并。请注意,所有文件都具有相同的格式。

sr.master <- do.call("rbind", lapply(file_list, read.csv,  sep = ";", header = TRUE)) 
names(sr.master)
str(sr.master)
Run Code Online (Sandbox Code Playgroud)

但是,在检查完生成的文件后,我意识到只有第一个文件已导入。是什么导致此问题?

> str(sr.master)
'data.frame':   1941 obs. of  8 variables:
 $ Berechnung: Factor w/ 51 levels "Berechnung 1",..: 51 1 12 23 34 45 47 48 49 50 ...
 $ Situation : Factor w/ 13 levels "Nach Massnahme 0",..: 6 6 6 6 6 6 6 6 6 …
Run Code Online (Sandbox Code Playgroud)

csv r rbind do.call read.csv

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