当前位置: 首页 > 知识库问答 >
问题:

通过sapply从子集上的一个函数创建多个变量:结果不是真实的?

白博赡
2023-03-14

介绍

# SAMPLE DATA
agyrw <- structure(list(company = c(28, 128, 22, 72, 62, 65, 132, 89, 46, 105), value.1993 = c(79272, 35850, 2124, 32, 0, 0, 0, 26359, 0, 0), value.1994 = c(103974, 10219, 31432, 0, 0, 0, 3997, 469, 0, 0)), .Names = c("company", "value.1993", "value.1994"), row.names = c(9L, 42L, 1L, 30L, 22L, 28L, 51L, 34L, 20L, 40L), class = "data.frame")

agyrw2 <- agyrw     # FOR A LATER COMPARISON

agyrw
#      company value.1993 value.1994
#         28      79272     103974
#        128      35850      10219
#         22       2124      31432
#         72         32          0
#         62          0          0
#         65          0          0
#        132          0       3997
#         89      26359        469
#         46          0          0
#        105          0          0
# SUM TOTAL VALUE BY YEAR
total.1993 <- sum(agyrw$value.1993)
total.1994 <- sum(agyrw$value.1994)

# CALCULATE THE MARKET SHARE FOR EACH IMPORTER, BY YEAR
agyrw$share.1993 <- agyrw$value.1993 / total.1993
agyrw$share.1994 <- agyrw$value.1994 / total.1994

# FORMAT THE MARKET SHARE VARIABLE TO ONLY FOUR DECIMAL PLACES
agyrw$share.1993 <- format(round(agyrw$share.1993, 4), nsmall = 4)
agyrw$share.1994 <- format(round(agyrw$share.1994, 4), nsmall = 4)

# RECONVERT THE MARKET SHARE VARIABLE BACK INTO NUMERIC
agyrw$share.1993 <- as.numeric(agyrw$share.1993)
agyrw$share.1994 <- as.numeric(agyrw$share.1994)

# VIEW
agyrw
#       company value.1993 value.1994 share.1993 share.1994
#          28      79272     103974     0.5519     0.6927
#         128      35850      10219     0.2496     0.0681
#          22       2124      31432     0.0148     0.2094
#          72         32          0     0.0002     0.0000
#          62          0          0     0.0000     0.0000
#          65          0          0     0.0000     0.0000
#         132          0       3997     0.0000     0.0266
#          89      26359        469     0.1835     0.0031
#          46          0          0     0.0000     0.0000
#         105          0          0     0.0000     0.0000
agyrw2$share <- sapply(agyrw2[,2:3], function(x) {
    total <- sum(x)
    share <- as.numeric(format(round(x/total, 4), nsmall = 4))
    return(share)
    }
       )

# VIEW
agyrw2
#      company value.1993 value.1994 share.value.1993 share.value.1994
#          28      79272     103974           0.5519           0.6927
#         128      35850      10219           0.2496           0.0681
#          22       2124      31432           0.0148           0.2094
#          72         32          0           0.0002           0.0000
#          62          0          0           0.0000           0.0000
#          65          0          0           0.0000           0.0000
#         132          0       3997           0.0000           0.0266
#          89      26359        469           0.1835           0.0031
#          46          0          0           0.0000           0.0000
#         105          0          0           0.0000           0.0000
names(agyrw)
#[1] "company"   "value.1993" "value.1994" "share.1993" "share.1994"
names(agyrw2)
#[1] "company"   "value.1993" "value.1994" "share"  

共有1个答案

庄浩言
2023-03-14

关于:

agyrw2 <- cbind(agyrw2,do.call(cbind, lapply(agyrw2[,2:3], function(x) {
    total <- sum(x)
    share <- as.numeric(format(round(x/total, 4), nsmall = 4))
    return(share)
    })))

或者简单地说:

agyrw2$share.1993 <- as.numeric(format(round(agyrw2$value.1993 / sum(agyrw2$value.1993), 4), nsmall = 4))
agyrw2$share.1994 <- as.numeric(format(round(agyrw2$value.1994 / sum(agyrw2$value.1994), 4), nsmall = 4))
 类似资料:
  • 问题内容: 我想用Python(不是数组)中的一个创建10个变量。像这样: 我想创建的变量名,在这种情况下: ,,,…, 我不想一个数组 我有一个坐标图(640 x 480)。我正在确定像素颜色为白色的坐标。地面上有3个球,我想获取每个球的中心坐标,因此,如果要评估的坐标距离最后一个球很近,则x和y坐标将被平均(如果该坐标属于a)新球的坐标将属于新坐标组。 问题答案: 您不应该这样做,但是如果您真

  • 问题内容: 我想将同一数组的2个部分组合成一个复杂的数组: 这些不起作用: 我想念什么吗?numpy是否不喜欢对复数执行数组函数?这是错误: 问题答案: 这似乎可以满足您的要求: 这是另一种解决方案: 还有另一个更简单的解决方案: PS :如果要保存内存(无中间阵列): devS的以下解决方案也很快。

  • 我有一个国家和年份级别的面板数据集,我想根据现有的变量创建两个新变量。 我想做的是创建两个新变量集:(1)每年(跨国家)平均值的变量集和(2)国家/地区值相对于年平均值的变量集。例如,对于 var1(1) 将产生 mean_var1 和 (2) relmean_var1我希望这些变量用于所有其他变量。总的来说,数据集中有超过1000个变量,但我只将此函数应用于大约6个。 我有适用于第一部分的代码,

  • 我目前正在与tkinter一起完成一项学校作业,为用户创建一个图形用户界面以输入他们的输入。我决定将输入分成不同的页面,以避免用户被问题淹没,并且不需要滚动 每一页都有一系列标签和条目,在一个右除数和一个左除数上分开,我已经设法在每一页上实现了这一点,付出了一些努力。这是我工作代码的简化版本: 然而,在将每个页面拆分为两个不同的Frame()容器时,我遇到了两个问题: 用ipadx和ipady设置

  • 问题内容: 我在存储过程中的MS- SQL中有一个结果集,可以说它有一个VARCHAR列,但有很多行。我想创建一个包含所有这些值的逗号分隔的字符串,是否有一种简单的方法来执行此操作,还是我必须逐步检查每个结果并手动构建字符串? 最好是我想在存储过程本身中执行此操作。 问题答案: 这是一种方法(使用AdventureWorks2008 DB): 这是另一个(从SQL 2005开始): 在这两种情况下

  • 对于某些参数将成功实例化,而对于其他参数则不会。 不修改或扩展的定义,是否可以编写一个bool变量模板: 这样为真,是否会成功实例化? 这将输出,预期的输出是吗? 什么给?