使用prop.table时维护字符列
假设我有这样一个数据帧:使用prop.table时维护字符列,r,R,假设我有这样一个数据帧: data <- data.frame( sent = letters[1:5], n.x = abs(rnorm(5)), n.y = abs(rnorm(5)) ) 我得到以下信息: sent n.x n.y [1,] 0.06666667 0.0948657 0.1665655 [2,] 0.13333333 0.1042308 0.2598814 [3,] 0.20000000 0.3516696
data <- data.frame(
sent = letters[1:5],
n.x = abs(rnorm(5)),
n.y = abs(rnorm(5))
)
我得到以下信息:
sent n.x n.y
[1,] 0.06666667 0.0948657 0.1665655
[2,] 0.13333333 0.1042308 0.2598814
[3,] 0.20000000 0.3516696 0.2230854
[4,] 0.26666667 0.2617903 0.1438551
[5,] 0.33333333 0.1874436 0.2066125
如何将第一列保留为字符向量?如果我理解正确,您实际需要的是
data <- data.frame(
sent = letters[1:5],
n.x = abs(rnorm(5)),
n.y = abs(rnorm(5))
)
cbind(data[1], prop.table(data.matrix(data[-1]), 2))
sent n.x n.y
1 a 0.0004247739 0.17667990
2 b 0.1748003178 0.30665196
3 c 0.1361206704 0.17707674
4 d 0.6359362530 0.25927624
5 e 0.0527179849 0.08031516
data刚刚做了一个小测试:随着数据变得越来越大(越来越宽,越来越长),使用cbind(数据[1],lapply(数据[-1],属性表)
会更快,内存效率更高,因为它不会创建新的矩阵
data <- data.frame(
sent = letters[1:5],
n.x = abs(rnorm(5)),
n.y = abs(rnorm(5))
)
cbind(data[1], prop.table(data.matrix(data[-1]), 2))
sent n.x n.y
1 a 0.0004247739 0.17667990
2 b 0.1748003178 0.30665196
3 c 0.1361206704 0.17707674
4 d 0.6359362530 0.25927624
5 e 0.0527179849 0.08031516