我有以下面板数据框:
X1 X2 X3 X4 X5 Y1 Y2 Y3 Y4 Y5
Ind 1 7 NA NA NA NA 1 4 6 8 6
Ind 2 2 NA 16 NA NA 5 16 12 3 4
Ind 3 NA NA NA 19 92 13 NA 12 NA NA
Ind 4 32 5 12 3 5 NA NA NA NA 4
Ind 5 44 3 46 3 47 3 2 NA 3 4
Ind 6 NA 34 NA 8 NA 14 15 12 3 4
Ind 7 49 55 67 49 89 6 17 2 3 4
Ind 8 NA NA 49 NA NA 11 20 6 NA 4
Ind 9 1 1 5 NA 9 NA NA NA NA NA
可粘贴格式:
df <- read.table(text="Index_name,X1 X2 X3 X4 X5 Y1 Y2 Y3 Y4 Y5
Ind_1 7 NA NA NA NA 1 4 6 8 6
Ind_2 2 NA 16 NA NA 5 16 12 3 4
Ind_3 NA NA NA 19 92 13 NA 12 NA NA
Ind_4 32 5 12 3 5 NA NA NA NA 4
Ind_5 44 3 46 3 47 3 2 NA 3 4
Ind_6 NA 34 NA 8 NA 14 15 12 3 4
Ind_7 49 55 67 49 89 6 17 2 3 4
Ind_8 NA NA 49 NA NA 11 20 6 NA 4
Ind_9 1 1 5 NA 9 NA NA NA NA NA",row.names=1,
header=TRUE, stringsAsFactors=FALSE)
我想过滤出都是以NA
开头的列和以<{1}开始的列中所有没有至少两个非X
值的行与Y
。
例如:
答案 0 :(得分:0)
您可以这样做。基本上,您正在计数(使用rowSums
),首先在x1-x5中然后在y1-y5中计算非NA数据点的数量。要识别非NA,我使用!is.na()
。 !
是一个否定词,因此该表达式的意思是“不是NA”。最后,对于x1-x5,仅保留“非NA的行总和> = 2”的行;对于y1-y5,仅保留其中(&
)的行。要清楚地了解索引编制,您的data.frame
中有10列。 df[,1:5]
代表前5列,即x1-x5。
df[rowSums(!is.na(df[,1:5]))>=2 & rowSums(!is.na(df[,6:10]))>=2,]
X1 X2 X3 X4 X5 Y1 Y2 Y3 Y4 Y5
Ind_2 2 NA 16 NA NA 5 16 12 3 4
Ind_3 NA NA NA 19 92 13 NA 12 NA NA
Ind_5 44 3 46 3 47 3 2 NA 3 4
Ind_6 NA 34 NA 8 NA 14 15 12 3 4
Ind_7 49 55 67 49 89 6 17 2 3 4
数据
df <- read.table(text="Index_name,X1 X2 X3 X4 X5 Y1 Y2 Y3 Y4 Y5
Ind_1 7 NA NA NA NA 1 4 6 8 6
Ind_2 2 NA 16 NA NA 5 16 12 3 4
Ind_3 NA NA NA 19 92 13 NA 12 NA NA
Ind_4 32 5 12 3 5 NA NA NA NA 4
Ind_5 44 3 46 3 47 3 2 NA 3 4
Ind_6 NA 34 NA 8 NA 14 15 12 3 4
Ind_7 49 55 67 49 89 6 17 2 3 4
Ind_8 NA NA 49 NA NA 11 20 6 NA 4
Ind_9 1 1 5 NA 9 NA NA NA NA NA",row.names=1,
header=TRUE, stringsAsFactors=FALSE)