r - 如何用不同的数字划分每一列
问题描述
我使用R的“table”函数对数据进行汇总,得到如下结果:
汇总数据
现在,我想将第一列中的所有数字除以 32,将第二列中的所有数字除以 51,将第三列中的所有数字除以 54。然后这些数字将形成一个新的 3*5 矩阵,并且我将使用新矩阵继续绘制条形图。
这里有人知道我如何在 R 中编写命令吗?
解决方案
我们可以使用col
复制vector
值以使长度相同,然后进行除法
out/c(32, 51, 54)[col(out)]
或者只是转置输出,进行除法和转置
t(t(out)/c(32, 51, 54))
如果我们举一个可重现的例子
df1 <- mtcars[1:3, 1:3]
col(df1) # gives the column index
# [,1] [,2] [,3]
#[1,] 1 2 3
#[2,] 1 2 3
#[3,] 1 2 3
在R
中,索引从 1 开始。由于这些索引是重复的,当我们传递vector
等于总列数的值时,每个值都会被复制
v1 <- c(32, 51, 54)
v1[col(df1)]
#[1] 32 32 32 51 51 51 54 54 54
现在长度相同
df1/v1[col(df1)]
# mpg cyl disp
#Mazda RX4 0.65625 0.11764706 2.962963
#Mazda RX4 Wag 0.65625 0.11764706 2.962963
#Datsun 710 0.71250 0.07843137 2.000000
通过单独划分检查输出
df1[,1]/32
#[1] 0.65625 0.65625 0.71250
对于第二种解决方案,通过执行转t
置,我们利用了回收
t(df1)/v1
# Mazda RX4 Mazda RX4 Wag Datsun 710
#mpg 0.6562500 0.6562500 0.71250000
#cyl 0.1176471 0.1176471 0.07843137
#disp 2.9629630 2.9629630 2.00000000
随着输出被转置,我们进行第二次转置t
以获得原始数据结构
推荐阅读
- python - 为什么 pandas read_csv 能够找到文件但 os.listdir 不能?
- r - 如何使用 insertUI 在 Shiny 应用程序中将 textInput 转换为输出
- python - 带有百分比的 Pandas groupby 聚合
- django - 检查 django 多态模型上是否存在某个多对多外键
- ruby-on-rails - Pagey:如何在页面之间保持一致的循环索引?
- javascript - JS:保护数据不被控制台访问
- python - 从python中的字典中删除多个键值对
- azure - Azure 批处理不会刷新池中的缓存容器
- contiki - 如何在 Contiki RPL 经典中让所有首选父节点达到某个节点的根目录?
- ios - iOS - 获取设备的 WIFI IP 地址