R - 删除名称不包含在列表中的列
Posted
技术标签:
【中文标题】R - 删除名称不包含在列表中的列【英文标题】:R - Delete columns which names are not included in a list 【发布时间】:2018-06-28 03:05:55 【问题描述】:我有 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 的第一列中。如果没有,我想删除子框架中的这些列。我只想让子帧中的站也列在 MainFrame 中。
在这种情况下,我想删除 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】:您可以通过执行以下操作指定您只需要 MainFrame
中的列,从而对您的 SubFrame
数据框进行子集化:
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 列,因此我们可以通过使用上述内容并仅使用 Date 列使用 cbind
来获取它:
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
【讨论】:
谢谢!那工作得很好!我永远也想不到!以上是关于R - 删除名称不包含在列表中的列的主要内容,如果未能解决你的问题,请参考以下文章
R Shiny DataTable如何防止包含超链接的列中的行选择/取消选择
R语言使用isna函数查看列表和dataframe中是否包含缺失值将dataframe中数据列中的异常值标注为缺失值NA使用na.omit函数删除dataframe中包含缺失值NA的数据行