通过将向量与数据帧匹配来创建向量[R]

时间:2017-07-31 22:06:37

标签: r vector

我有以下数据框:

> zCode <- sample(50:150, size = 10, replace = TRUE)
> x <- sample(50:150, size = 10, replace = TRUE)
> test <- data.frame(x,zCode )
> test
  zCode  x
1  110 114
2  108 150
3   57 100
4   53  98
5  114  67
6  143 126
7  110  95
8  106 101
9  103  70
10 149  73

我也有这个载体:

> z <- c(53, 57, 110)
> z
[1]  53  57 110

我想基于向量Z创建一个新的数据帧,它会拉出与该z代码关联的最大x值,如下所示:

 Z   x
53   98
57   100
110  114

2 个答案:

答案 0 :(得分:2)

以下是一些可能性。他们不使用任何包裹。

1)对于z的每个元素,使用该zCode计算测试中行的子集,然后取每个x的最大值:

data.frame(z, x = sapply(z, function(z) max(subset(test, z == zCode)$x)))

,并提供:

    z   x
1  53  98
2  57 100
3 110 114

2)另一种方法是使用聚合来查找所有最大值并使用z进行合并以获得这些:

merge(data.frame(z), aggregate(x ~ zCode, test, max), by = 1, all.x = TRUE)

,并提供:

    z   x
1  53  98
2  57 100
3 110 114

Hote:以可重现的形式使用的输入是:

Lines <- "
  zCode  x
1  110 114
2  108 150
3   57 100
4   53  98
5  114  67
6  143 126
7  110  95
8  106 101
9  103  70
10 149  73"
test <- read.table(text = Lines)

z <- c(53, 57, 110)

答案 1 :(得分:0)

以下是# Original data dt <- data.table(zCode = c(110, 108, 57, 53, 114, 143, 110, 106, 103, 149), x = c(114, 150, 100, 98, 67, 126, 95, 101, 70, 73)) z <- c(53, 57, 110) # a new dataframe based on vector z dt[zCode %in% z, max(x), by = zCode] zCode V1 1: 110 114 2: 57 100 3: 53 98 解决方案:

# Keeps the columns names unchanged
dt[zCode %in% z, .(x = max(x)), by = zCode]
   zCode   x
1:   110 114
2:    57 100
3:    53  98

编辑:

 [TeamExplorerNavigationItem(GuidList.sampleTeamExplorerNavigationItem, 100)]
public class SampleTeamExplorerNavigationItem : ITeamExplorerNavigationItem
{
   ...
}