通过将向量与数据帧匹配来创建向量[R]
我有以下数据帧:通过将向量与数据帧匹配来创建向量[R],r,vector,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
> 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
这里有一些可能性。他们不使用任何软件包 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
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
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)对于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
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
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)
行这是一个数据。表
解决方案:
# 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
下面是一个数据表
解决方案:
# 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
set.seed()
在生成数据之前是一个好主意。set.seed()
在生成数据之前是一个好主意。谢谢,您知道任何简单的方法来调整lappy代码以获得唯一计数并添加多个条件吗?谢谢,您知道任何简单的方法来调整lappy代码以获得唯一计数并添加多个条件吗?