我想用/或和的组合对data.frame进行子集化.这是我使用普通R函数的代码.
df <- expand.grid(list(A = seq(1, 5), B = seq(1, 5), C = seq(1, 5)))
df$value <- seq(1, nrow(df))
df[(df$A == 1 & df$B == 3) |
(df$A == 3 & df$B == 2),]
Run Code Online (Sandbox Code Playgroud)
如何在dplyr包中使用过滤功能转换它们?谢谢你的任何建议.
我的数据顺序很重要.如果我将CSV加载到R中read.csv,那么数据帧中行的顺序是否保证与CSV 的顺序相匹配?
如果我将一堆CSV和rbind它们一起加载然后subset用来获取我感兴趣的数据怎么样?
例如:
1.csv
foo,bar
a,123
a,456
c,789
Run Code Online (Sandbox Code Playgroud)
2.csv
foo,bar
d,987
a,999
b,654
a,321
Run Code Online (Sandbox Code Playgroud)
请问以下内容:
data1<-read.csv("1.csv", header=T)
data2<-read.csv("2.csv", header=T)
all_data<-rbind(data1, data2)
filtered<-subset(all_data, foo=="a")
Run Code Online (Sandbox Code Playgroud)
... 总是产生一个filtered:
foo bar
1 a 123
2 a 456
3 a 999
4 a 321
Run Code Online (Sandbox Code Playgroud)
...并且此行为是否适用于任意CSV输入和过滤器?
这看起来很简单,但我无法弄清楚.
鉴于此数据框架
df=data.frame(
x = c(12,12,165,165,115,148,148,155,155,521),
y = c(54,54,122,122,215,108,108,655,655,151)
)
df
x y
1 12 54
2 12 54
3 165 122
4 165 122
5 115 215
6 148 108
7 148 108
8 155 655
9 155 655
10 521 151
Run Code Online (Sandbox Code Playgroud)
现在,我如何获得仅存在一次的行.这是第5行和第10行.行的顺序可以完全是任意的,因此检查"下一行"不是一种选择.我尝试了很多东西,但是我的data.frame没有任何工作,它有大约40k行.
我有一个解决方案在我的data.frame的子集(~1k行)上工作,需要3分钟来处理.因此,我的解决方案需要120分钟的原始data.frame,这是不合适的.有人可以帮忙吗?