如何打印包含列的特定值的行?

时间:2017-11-01 17:00:08

标签: r for-loop if-statement

我试图制作一个循环并在列中搜索一个值,然后显示该值的所有第一行,我希望从1950年到2016年

Em=
 year    x      y
 1950    5      3
 1950    4      3
 1950    2      4
 1950    1      5
 1951    6      7
 1951    5      6
 1951    1      4
 1951    0      3

我一直在尝试这个:

for (p in 1:nrow(Em)){
if (Em[p,"year"]==1950)
   break
   print(Em[p,])} #it is not showing me just the first row that matches
{ else if (Em[p,"year"]==1951)
    break
    print(Em[p,])}

并获得

year    x      y
1950    5      3
1951    6      7

2 个答案:

答案 0 :(得分:2)

Base R的解决方案:

Em_sub = aggregate(. ~ year, data = Em, '[', 1)

dplyr

library(dplyr)
Em_sub = Em %>%
  group_by(year) %>%
  slice(1)

<强>结果:

  year x y
1 1950 5 3
2 1951 6 7

# A tibble: 2 x 3
# Groups:   year [2]
   year     x     y
  <int> <int> <int>
1  1950     5     3
2  1951     6     7

数据:

Em = read.table(text = "year    x      y
                1950    5      3
                1950    4      3
                1950    2      4
                1950    1      5
                1951    6      7
                1951    5      6
                1951    1      4
                1951    0      3", header = TRUE)

答案 1 :(得分:1)

这是一个基本解决方案。

t(sapply(split(Em, Em$year), function(x) x[1, ]))
#      year x y
# 1950 1950 5 3
# 1951 1951 6 7

简而言之,我们按年分割数据框以创建列表。我们遍历列表并返回第一行。最后,我们将结果矩阵转置为与Em

具有相同的方向