某些模式作为R中的缺失数据

某些模式作为R中的缺失数据,r,missing-data,R,Missing Data,数据帧由5个变量组成: > head(list_outdegrees, 5) Name OUTdegrees Followers Friends Statuses 1 Case_1 11 44423 4053 34518 2 Case_2 35 0 0 0 3 Case_3 13 41775

数据帧由5个变量组成:

> head(list_outdegrees, 5)
             Name OUTdegrees Followers Friends Statuses
1          Case_1         11     44423    4053    34518
2          Case_2         35         0       0        0
3          Case_3         13     41775     404   279384
4          Case_4         20     91952       0   108603
5          Case_5         13     31886    2885     4847
我最近在这个网站上了解了如何在R中使零丢失,并被告知使用na.strings,如read.csvfilename.csv中的na.strings,na.strings=0。这很好,但是这并不完全是我需要的,因为在我的例子中,有时零是实际数据

在上面的示例中,Case_2缺少数据,因为Followers、Friends和status变量都是零。然而,在情况_4中,零是一个实际的数据段

因此,只有当案例的三个变量Followers、Friends和status为零时,才会丢失数据。此外,OUTdegrees始终具有一个值,无论其是否缺少数据


当且仅当追随者、朋友和状态均为零时,是否可以告诉R删除或忽略案例?

您可以使用子集功能:

subset(list_outdegrees,Followers!=0 | Friends!=0 | Statuses!=0)

您不希望删除三个零中有一个实际上是缺失值的行。我将用缺少的值读入文件,删除缺少的行,然后手动输入0

data <- read.csv("filename.csv")
data <- data[!(is.na(data$Followers) & is.na(data$Friends) & is.na(data$Statuses)), ]
data[is.na(data)] <- 0
您可以在相关列列表的逻辑索引矩阵上使用行和_outdegrees[-1:2]=0当有多个列时,这将非常有用

 list_outdegrees[!!rowSums(!!list_outdegrees[-(1:2)]),]
 #   Name OUTdegrees Followers Friends Statuses
 #1 Case_1         11     44423    4053    34518
 #3 Case_3         13     41775     404   279384
 #4 Case_4         20     91952       0   108603
 #5 Case_5         13     31886    2885     4847
上述内容也可以写成

 list_outdegrees[rowSums(list_outdegrees[-(1:2)]!=0)!=0,]
或者使用Reduce|

数据
 list_outdegrees[Reduce(`|`, list_outdegrees[-(1:2)]),]
 #    Name OUTdegrees Followers Friends Statuses
 #1 Case_1         11     44423    4053    34518
 #3 Case_3         13     41775     404   279384
 #4 Case_4         20     91952       0   108603
 #5 Case_5         13     31886    2885     4847
list_outdegrees <- structure(list(Name = c("Case_1", "Case_2", "Case_3", "Case_4", 
"Case_5"), OUTdegrees = c(11L, 35L, 13L, 20L, 13L), Followers = c(44423L, 
0L, 41775L, 91952L, 31886L), Friends = c(4053L, 0L, 404L, 0L, 
2885L), Statuses = c(34518L, 0L, 279384L, 108603L, 4847L)), .Names = c("Name", 
"OUTdegrees", "Followers", "Friends", "Statuses"), class = "data.frame", 
row.names = c("1", "2", "3", "4", "5"))