R - 删除名称未包含在列表

时间:2018-01-18 22:43:55

标签: r dataframe subset

我有2个这样的数据帧(代码如下):

>MainFrame
   Station        V1        V2       V3
1  Station1  5.000000  4.000000 10.00000
2  Station2  8.571429  5.714286 17.14286
3  Station3 12.142857  7.428571 24.28571
4  Station4 15.714286  9.142857 31.42857
5  Station6 19.285714 10.857143 38.57143
6  Station7 22.857143 12.571429 45.71429
7  Station9 26.428571 14.285714 52.85714
8  Station10 30.000000 16.000000 60.00000

>SubFrame
    Date     Station1 Station3 Station5 Station7 Station8
1 20000608        5      4.0       10        5        5
2 20000609       10      6.4       20       10       10
3 20000610       15      8.8       30       15       15
4 20000611       20     11.2       40       20       20
5 20000612       25     13.6       50       25       25
6 20000613       30     16.0       60       30       30

我想立即检查SubFrame中的Station-Names(列名)是否包含在MainFrame的第一列中。如果没有,我想删除子框架中的这些列。我只想在SubFrame中拥有也在MainFrame中列出的Station。

在这种情况下,我想删除SubFrame中的Station5和Station8列,因为它们不包含在MainFrame中。

结果应该是这样的:

      Date    Station1 Station3 Station7
1 20000608        5      4.0        5
2 20000609       10      6.4       10
3 20000610       15      8.8       15
4 20000611       20     11.2       20
5 20000612       25     13.6       25
6 20000613       30     16.0       30

知道怎么做吗?

以下是我的2个测试帧的代码:

x1= c("Station1", "Station2", "Station3", "Station4", "Station6", "Station7", "Station9", "Station10")
x2= seq(5, 30, length=8)
x3= seq(4, 16, length=8)
x4= seq(10, 60, length=8) 

MainFrame = data.frame(Station=x1, V1=x2, V2=x3, V3=x4) 

x1= c("20000608", "20000609", "20000610", "20000611", "20000612", "20000613") 
x2= seq(5, 30, length=6)
x3= seq(4, 16, length=6)
x4= seq(10, 60,length=6) 
x5= seq(5, 30, length=6)
x6= seq(5, 30, length=6)

SubFrame = data.frame(Date=x1, Station1=x2, Station3=x3, Station5=x4, Station7=x5, Station8 =x6) 

1 个答案:

答案 0 :(得分:2)

您可以通过执行以下操作,指定您只想要SubFrame中的列来对MainFrame数据框进行分页:

unique(MainFrame$Station)收益:

unique(MainFrame$Station)
[1] "Station1"  "Station2"  "Station3"  "Station4"  "Station6"  "Station7"  "Station9"  "Station10"

*请注意,您必须将此列作为字符col。您可以通过设置:

来完成此操作
MainFrame$Station <- as.character(MainFrame$Station)

然后你可以分组:

SubFrame[,colnames(SubFrame) %in% unique(MainFrame$Station)]
  Station1 Station3 Station7
1        5      4.0        5
2       10      6.4       10
3       15      8.8       15
4       20     11.2       20
5       25     13.6       25
6       30     16.0       30

我们错过了Date列,因此我们可以通过上面的内容并使用cbind仅使用Date列来实现这一目标:

cbind(Date = SubFrame$Date, SubFrame[,colnames(SubFrame) %in% unique(MainFrame$Station)])

      Date Station1 Station3 Station7
1 20000608        5      4.0        5
2 20000609       10      6.4       10
3 20000610       15      8.8       15
4 20000611       20     11.2       20
5 20000612       25     13.6       25
6 20000613       30     16.0       30