我有一个包含900万行和3个变量的数据框。这3个变量分别是起点(具有46级的因子),目的地(具有46级的因子)和吞吐量(整数)。
我的数据框的简化版本如下所示: https://ibb.co/0p7g37B
我要删除Origin等于Destination的行(例如12th = 12th或16th = 16th)
我希望我的输出看起来像这样: https://ibb.co/k6h7qc2
数据:
df <- structure(list(Origin = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L
), .Label = c("12th", "16th"), class = "factor"), Destination = structure(c(1L,
1L, 4L, 4L, 2L, 3L, 5L), .Label = c("12th", "16th", "CIVC", "COLS",
"FTVL"), class = "factor"), Throughput = c(1L, 2L, 1L, 4L, 2L,
1L, 7L)), class = "data.frame", row.names = c(NA, -7L))
答案 0 :(得分:1)
Bruno和Nitesh的答案都能产生期望的输出,但是我认为不需要多余的mutate语句。您可以直接过滤结果:
df <- df %>% filter(Origin != Destination)
另一件事:为了能够比较两个因子变量,它们应该具有相同的水平。您应以两种都具有相同级别的方式来编辑原始或目标变量的级别。
答案 1 :(得分:0)
您可以创建一个虚拟变量,其字符串值为1和0。如果源和目标值相同,则返回1,否则为0。然后,您可以在新创建的虚拟变量中过滤出字符串值为0的行。如下所示:
data = read.csv("filepath of csv file.csv")
data$newdummy = ifelse(data$Origin == data$Destination, '1' ,'0')
data1 <- data[data$newdummy == '0',]
稍后,您可以删除创建虚拟值的列-
data1 <- data1[-4]
如果新的虚拟列的位置位于第3位。
希望有帮助。
答案 2 :(得分:0)
您可以使用tidyverse。
library(tidyverse)
df <- tribble(~Origin,~Destination,~Throughput,
"12th","12th",1,
"12th","12th",2,
"12th","COLS",1,
"12th","COLS",4,
"16th","16th",2,
"16th","CIVC",1,
"16th","FTVL",7)
df %>%
mutate(is_equal = if_else(Origin == Destination,
TRUE,
FALSE)) %>%
filter(is_equal == FALSE) %>%
select(-is_equal)