我有多个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中按行绑定列表时遇到问题.我的列表数据集是:
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代码时遇到了麻烦.以下示例代码应说明我的优化问题:
一些初始化和函数定义:
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) 如果我有两个具有相同列名的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)
使用单列,这很容易理解,但当它是十几个或更多因素的一部分时,它可能很难.有什么警告信息告诉我要查看哪一列?除此之外,了解哪一列错误的好方法是什么?
我经常使用相同的变量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()使用变量名来命名每一列?
我的第一个数据框(一个较大的数据框)有10行13列.第二个具有4行13列(所有除了Month是NA秒.
当我尝试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-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'文件的内容,而不是获取一个大数据框架.(这就是为什么在循环中有这两个注释的打印命令;我每次循环运行时都在测试数据帧中有多少行.)
谁能澄清我做错了什么?同样,我想在最后组合一个大数据框,它将文件夹中每个(当前七个)日志文件的内容组合在一起.
我data.frame在植物中种植了大量鲜花和水果,进行了 30 年的调查。我想在某些行中添加零 (0),这些行代表植物没有flowers或fruits(因为它是季节性物种)的特定月份中的个体。
例子:
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 填充它们。
谢谢。
我正在使用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) 我知道这个问题已经被问过多次了,但是尽管尝试应用上述解决方案,但我还是无法解决我的小问题:
我已经保存了所有要合并到一个文件夹中的.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) r ×10
rbind ×10
dataframe ×3
lapply ×2
conditional ×1
csv ×1
data.table ×1
do.call ×1
for-loop ×1
function ×1
list ×1
optimization ×1
read.csv ×1
read.table ×1
rows ×1