有很多关于如何读取多个CSV并将它们绑定到一个数据帧的文档.我有5000多个CSV文件需要读入并绑定到一个数据结构中.
特别是我在这里的讨论:使用rbind将多个.csv文件加载到R中的单个数据帧中的问题
奇怪的是,基础R比我尝试过的任何其他解决方案都要快得多.
这是我的CSV的样子:
> head(PT)
Line Timestamp Lane.01 Lane.02 Lane.03 Lane.04 Lane.05 Lane.06 Lane.07 Lane.08
1 PL1 05-Jan-16 07:17:36 NA NA NA NA NA NA NA NA
2 PL1 05-Jan-16 07:22:38 NA NA NA NA NA NA NA NA
3 PL1 05-Jan-16 07:27:41 NA NA NA NA NA NA NA NA
4 PL1 05-Jan-16 07:32:43 9.98 10.36 10.41 10.16 10.10 9.97 10.07 9.59
5 PL1 05-Jan-16 07:37:45 9.65 8.87 9.88 9.86 8.85 8.75 9.19 8.51
6 PL1 05-Jan-16 …Run Code Online (Sandbox Code Playgroud) 我有一些格式很差的数据,我必须使用.它在前两行中包含两个标识符,后跟数据.数据看起来像:
V1 V2 V3
1 Date 12/16/18 12/17/18
2 Equip a b
3 x1 1 2
4 x2 3 4
5 x3 5 6
Run Code Online (Sandbox Code Playgroud)
我想让gather数据变得整洁,但只有当你有单个列名时,才能收集数据.我也尝试过传播.我提出的唯一解决方案是非常hacky并且感觉不对.有没有一种优雅的方式来处理这个?
这就是我想要的:
Date Equip metric value
1 12/16/18 a x1 1
2 12/16/18 a x2 3
3 12/16/18 a x3 5
4 12/17/18 b x1 2
5 12/17/18 b x2 4
6 12/17/18 b x3 6
Run Code Online (Sandbox Code Playgroud)
这种方法让我很接近,但我不知道如何处理糟糕的格式(没有标题,没有行名称).gather如果格式正确,应该很容易.
> as.data.frame(t(df))
V1 V2 V3 V4 V5
V1 Date Equip x1 x2 x3
V2 12/16/18 …Run Code Online (Sandbox Code Playgroud) 当我从宽格式到长格式收集列时,我试图保留列的顺序。我遇到的问题是在我之后gather,summarize订单丢失了。列数很大,所以我不想手动输入订单。
下面是一个例子:
library(tidyr)
library(dplyr)
N <- 4
df <- data.frame(sample = c(1,1,2,2),
y1.1 = rnorm(N), y2.1 = rnorm(N), y10.1 = rnorm(N))
> df
sample y1.1 y2.1 y10.1
1 1 1.040938 0.8851727 -0.3617224
2 1 1.175879 1.0009824 -1.1352406
3 2 -1.501832 0.3446469 -1.8687008
4 2 -1.326817 0.4434628 -0.8795962
Run Code Online (Sandbox Code Playgroud)
我想要的是保留列的顺序。在我做了一些操作后,订单丢失了。在这里看到:
dfg <- df %>%
gather(key="key", value="value", -sample) %>%
group_by(sample, key) %>%
summarize(mean = mean(value))
> filter(dfg, sample == 1)
sample key mean
<dbl> <chr> <dbl>
1 1 y1.1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试从数据框中删除重复的行,仅基于前一行.该duplicate和unique功能将删除所有重复,让你只用唯一行,这不是我想要的.
我用循环说明了这里的问题.我需要对此进行矢量化,因为我的实际数据集要大得多以使用循环.
x <- c(1,1,1,1,3,3,3,4)
y <- c(1,1,1,1,3,3,3,4)
z <- c(1,2,1,1,3,2,2,4)
xy <- data.frame(x,y,z)
xy
x y z
1 1 1 1
2 1 1 2
3 1 1 1
4 1 1 1 #this should be removed
5 3 3 3
6 3 3 2
7 3 3 2 #this should be removed
8 4 4 4
# loop that produces desired output
toRemove <- NULL
for (i in 2:nrow(xy)){
test <- as.vector(xy[i,] == xy[i-1,]) …Run Code Online (Sandbox Code Playgroud) 我有一个很难理解R为如何治疗AND和OR运算时,我使用filter的dplyr.
这是一个例子来说明:
library(dplyr)
xy <- data.frame(x=1:6, y=c("a", "b"), z= c(rep("d",3), rep("g",3)))
> xy
x y z
1 1 a d
2 2 b d
3 3 a d
4 4 b g
5 5 a g
6 6 b g
Run Code Online (Sandbox Code Playgroud)
使用filter我想消除所有行x==1 和 z==d.这会让我相信我想使用AND运算符:&
> filter(xy, x != 1 & z != "d")
x y z
1 4 b g
2 5 a g
3 6 b g
Run Code Online (Sandbox Code Playgroud)
但这会删除所有具有x==1 或的 行 …