我有一个data.frame。我想提取id[i] != id[i+1]
的用户数据。换句话说,新的data.frame应该删除原始data.frame中的ID与下一行中的ID相同的任何行。
我正在做的事情如下:
counter <- 0
temp_bind_1 <-
read.csv("/Users/dushyanttanna/Documents/R_codes/temp_bind.csv")
##an empty file... just with header##
for (i in 2:100000) {
if (df_merged$Id[i] != df_merged$Id[i+1]) {
temp_file <- data.frame(temp_bind + df1[i,])
counter <- counter + 1
}
}
print(counter) # just to see how many rows are there....
write.csv(temp_file,"temp_bind_final.csv", row.names = FALSE)
但它未能提供所需的输出。
答案 0 :(得分:0)
这是一个演示如何执行此操作的最小示例。
让我们制作一些伪数据
set.seed(123)
x = data.frame(Id = sample(letters[1:3],10,T), value = rnorm(10))
# Id value
# 1 a 1.7150650
# 2 c 0.4609162
# 3 b -1.2650612
# 4 c -0.6868529
# 5 c -0.4456620
# 6 a 1.2240818
# 7 b 0.3598138
# 8 c 0.4007715
# 9 b 0.1106827
# 10 b -0.5558411
现在要提取id [i]!= id [i + 1]的行,我们可以做
x[c(diff(as.integer(x$Id)) !=0, TRUE), ]
# Id value
# 1 a 1.7150650
# 2 c 0.4609162
# 3 b -1.2650612
# 5 c -0.4456620
# 6 a 1.2240818
# 7 b 0.3598138
# 8 c 0.4007715
# 10 b -0.5558411
请注意,您没有指定如何处理data.frame的最后一行(它没有我们可以将它与之比较的后续行)。上面的代码假设您要保留最后一行。相反,如果您需要将其删除,则可以使用
x[c(diff(as.integer(x$Id)) !=0, FALSE), ]
另请注意,此方法假定Id列是因子或整数。如果不是,那么您应该先x$Id = factor(x$Id)
。