我在reshape()
功能方面遇到了一些问题。一旦我重新整形,它就会将我的所有变量名称更改为“value.var 1”。
我用来重塑的代码是:
test<- reshape(cdc_city, idvar= "site", timevar="variable",
direction="wide", new.row.names=FALSE)
我猜我正在使用“new.row.names = FALSE”部分错误。我试图将FALSE替换为NULL,但这也没有用。
我的目标是转换数据集如下:
site variable value
site 1 var 1 4
site 1 var 2 7
site 1 var 3 2
site 1 var 4 6
site 1 var 5 3
site 2 var 1 89
site 2 var 2 43
site 2 var 3 12
site 2 var 4 54
site 2 var 5 23
site 3 var 1 76
site 3 var 2 62
site 3 var 3 13
site 3 var 4 43
site 3 var 5 23
进入这样的数据集:
site var 1 var 2 var 3 var 4 var 5
1 4 7 2 6 3
2 89 43 12 54 23
3 76 62 13 43 23
如果有人知道如何摆脱“价值”。出现在我的变量名称的开头,这将是伟大的!或者,如果有更好的代码我可以使用,我也非常开放。
谢谢,
蒂莫西
答案 0 :(得分:4)
为了像这样重塑,xtabs
也很有用:
xtabs(value ~ site + variable, data = cdc_city)
# variable
# site var 1 var 2 var 3 var 4 var 5
# site 1 4 7 2 6 3
# site 2 89 43 12 54 23
# site 3 76 62 13 43 23
关于您的问题,我实际上并未将其视为“ 问题 ”。这就是假设的工作方式。
请考虑以下情形。您的data.frame
中有另一列(我们称之为“其他”),您希望将整个数据集从长到大重新整形。
以下是一些示例数据和输出:
set.seed(1)
cdc_city$other = sample(1:20, 15, replace=TRUE)
reshape(cdc_city, direction="wide",
idvar="site", timevar="variable")
# site value.var 1 other.var 1 value.var 2 other.var 2 value.var 3
# 1 site 1 4 6 7 8 2
# 6 site 2 89 18 43 19 12
# 11 site 3 76 5 62 4 13
# other.var 3 value.var 4 other.var 4 value.var 5 other.var 5
# 1 12 6 19 3 5
# 6 14 54 13 23 2
# 11 14 43 8 23 16
在我的意见中,在这种情况下,将value
和other
添加到变量名称是必不可少的。
最后,你的new.row.names
参数在这里没用,因为你的不满是列名,而不是行名。
由于我有分享替代方案的心情,您可能也有兴趣探索aggregate
,它也有相当容易理解的语法:
aggregate(list(var = cdc_city$value),
list(site = cdc_city$site), c)
# site var.1 var.2 var.3 var.4 var.5
# 1 site 1 4 7 2 6 3
# 2 site 2 89 43 12 54 23
# 3 site 3 76 62 13 43 23
如果您使用aggregate
,您还可以某些控制结果变量的名称。
答案 1 :(得分:2)
我建议你使用reshape2
套餐 - 使用melt
和dcast
要比内置reshape()
更容易:
library(reshape2)
dcast(cdc_city, site~variable, mean)
site var 1 var 2 var 3 var 4 var 5
1 site 1 4 7 2 6 3
2 site 2 89 43 12 54 23
3 site 3 76 62 13 43 23
答案 2 :(得分:1)
是的,可以使用内置base::reshape()
。
对于direction=="wide"
,您可以使用带有varying
参数的列表重命名重新整形的变量。如您所见,reshape
will generate a column name看起来像`v.name`.`times`
。 varying
direction=="long"
接受名称向量(适用于cdc_city <- data.frame(
site=paste("site", rep(1:3, each=5)),
variable=paste("var", rep(1:5, 3)),
value=c(4,7,2,6,3,89,43,12,54,23,76,62,13,43,23))
# site variable value
# 1 site 1 var 1 4
# 2 site 1 var 2 7
# 3 site 1 var 3 2
# 4 site 1 var 4 6
# 5 site 1 var 5 3
# 6 site 2 var 1 89
# 7 site 2 var 2 43
# 8 site 2 var 3 12
# 9 site 2 var 4 54
# 10 site 2 var 5 23
# 11 site 3 var 1 76
# 12 site 3 var 2 62
# 13 site 3 var 3 13
# 14 site 3 var 4 43
# 15 site 3 var 5 23
test <- reshape(cdc_city,
varying=list(c("var 1", "var 2", "var 3", "var 4", "var 5")),
idvar= "site", timevar="variable", direction="wide")
# site var 1 var 2 var 3 var 4 var 5
# 1 site 1 4 7 2 6 3
# 6 site 2 89 43 12 54 23
# 11 site 3 76 62 13 43 23
)。
varying
注意字符串是因素的data.frames。您可以使用
直接从data.frame中的因子指定reshape( ..., varying=list(as.character(unique(cdc_city$variable))), ...)
SELECT COUNT (DISTINCT uid) from (SELECT DISTINCT uid from nodes UNION SELECT DISTINCT uid from ways) as subq ;