我有一个数据框:
a <- c(rep("A", 3), rep("B", 3), rep("C",2))
b <- c(1,1,2,4,1,1,2,2)
c <- c(1,NA,2,4,NA,1,2,2)
df <-data.frame(a,b,c)
我在第1列中有一些包含重复变量的数据框,但是当我使用重复的函数时,它会在使用副本(函数)重复删除后随机选择行
dedup_df = df[!duplicated(df$a), ]
如何确保输出返回c列c上不包含NA的行?
我尝试使用dplyr包,但输出只打印结果
library(dplyr)
options(dplyr.print_max = Inf )
df %>% ## source dataframe
group_by(a) %>% ## grouped by variable
filter(!is.na(c) ) %>% ## filter by Gross value
as.data.frame(dedup_df)
答案 0 :(得分:0)
您使用string primeNumbers = "";
//add numbers to string
primeNumbers = primeNumbers.Substring(0, primeNumbers.Length - 1);
函数删除重复的观察(行),使用列作为数据框中的键是正确的。
但似乎您担心它可能会在另一列中保留包含NA的行并删除包含非NA值的另一行。
我会用你的例子,但稍加修改
duplicated
在这种情况下,您的dedup_df包含第一个值的NA。
a <- c(rep("A", 3), rep("B", 3), rep("C",2))
b <- c(1,1,2,4,1,1,2,2)
c <- c(NA,1,2,4,NA,1,2,2)
df <-data.frame(a,b,c)
> df
a b c
1 A 1 NA
2 A 1 1
3 A 2 2
4 B 4 4
5 B 1 NA
6 B 1 1
7 C 2 2
8 C 2 2
解决方案:
首先按列c重新排序df,然后使用相同的命令。列c的这种重新排序将把所有NA发送到数据帧的末尾。当> dedup_df = df[!duplicated(df$a), ]
> dedup_df
a b c
1 A 1 NA
4 B 4 4
7 C 2 2
通过时,它会看到这些行最后有NA并且如果之前的那行没有NA则会将它们标记为TRUE。
duplicated
您也可以按降序重新排序
df = df[order(df$c),]
dedup_df = df[!duplicated(df$a), ]
> dedup_df
a b c
2 A 1 1
6 B 1 1
7 C 2 2