数据框由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
我最近在此网站上asked如何在R中将零丢失,并被告知在na.strings
中使用read.csv("filename.csv", na.strings="0")
。这很好用,但这不完全是我需要的,因为有时候零是我的实际数据。
在上面的示例中,Case_2
缺少数据,因为Followers
,Friends
和Statuses
变量都是零。但是,在Case_4
的情况下,零是实际的数据。
因此,只有当案例将三个变量(Followers
,Friends
和Statuses
)作为零时,才会丢失数据。此外,OUTdegrees
始终具有值,无论其是否缺少数据。
当Followers
,Friends
和Statuses
全部为零时,是否可以告诉R删除(或忽略)案例?
答案 0 :(得分:2)
您可以使用子集功能:
subset(list_outdegrees,Followers!=0 | Friends!=0 | Statuses!=0)
答案 1 :(得分:1)
您不想删除三个零中的一个实际上是缺失值的行。我会用缺少的值读取文件,删除丢失的行,然后手动插入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
答案 2 :(得分:1)
您可以在相关列(rowSums
)的逻辑索引矩阵上使用list_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"))