有条件地创建数据行

黄褐色

样本数据集:

Price=c(6651, 7255, 25465, 35645, 2556, 3665)
NumberPurchased=c(25, 30, 156, 250, 12, 16)
Type=c("A", "A", "C", "C", "B", "B")
Source=c("GSC", "MYL", "TTC", "ZAF", "CAN", "HLT")
df1 <- data.frame(Price, NumberPurchased, Type, Source)

我希望能够使用两个其他变量(IDPurchaseDate创建一个新的数据框但基于变量的数据行更多Type

我要应用的规则:如果Type = A,PurchaseDate则为“ 2013”​​,“ 2014”。如果Type = B,PurchaseDate则为“ 2013”​​。如果Type = C,PurchaseDate则为“ 2013”​​,“ 2014”,“ 2015”。

如果Type是A,分PriceNumberPurchased2,和有2行具有不同的PurchaseDate如上文所指定的。如果Type是B,假如与PurhcaseDate如2013年如果Type是C,分PriceNumberPurchased3,并有3行具有不同的PurchaseDate如上文所指定的。

因此,我想要这样的东西作为新的数据集:

Price=c(3325.5, 3325.5, 3627.5, 3627.5, 8488.3, 8488.3, 8488.3, 11881.6, 11881.6, 11881.6, 2556, 3665)
NumberPurchased=c(12.5, 12.5, 15, 15, 52, 52, 52, 83.3, 83.3, 83.3, 12, 16)
Type=c("A", "A", "A", "A", "C", "C", "C", "C", "C", "C","B", "B")
Source=c("GSC", "GSC", "MYL", "MYL", "TTC","TTC", "TTC",  "ZAF", "ZAF","ZAF", "CAN", "HLT")
PurchaseDate=c("2013", "2014", "2013", "2014", "2013", "2014", "2015", "2013", "2014", "2015", "2013", "2013")
ID=c(1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 5, 6)
df2 <- data.frame(Price, NumberPurchased, Type, Source, PurchaseDate, ID)

有见识吗?

大卫·阿伦堡

这是一种可能的方法。首先,我们将为创建索引Type,然后将相应地增长数据,然后将使用data.table包来计算新变量。

library(data.table)
setDT(df1)[, indx := as.numeric(factor(Type, levels = c("B", "A", "C")))]
# setDT(df1)[, indx := ifelse(Type == "C", 3, 2)] # Alternative index per your comment
df2 <- df1[rep(seq_len(.N), indx)]

df2[, `:=`(
            Price = Price/.N,
            PurchaseDate = 2013:(2013 + (.N - 1)),
            NumberPurchased = NumberPurchased/.N,
            ID = .GRP
           ), 
           by = .(Source, Type)][]

#         Price NumberPurchased Type Source indx PurchaseDate ID
#  1:  3325.500        12.50000    A    GSC    2         2013  1
#  2:  3325.500        12.50000    A    GSC    2         2014  1
#  3:  3627.500        15.00000    A    MYL    2         2013  2
#  4:  3627.500        15.00000    A    MYL    2         2014  2
#  5:  8488.333        52.00000    C    TTC    3         2013  3
#  6:  8488.333        52.00000    C    TTC    3         2014  3
#  7:  8488.333        52.00000    C    TTC    3         2015  3
#  8: 11881.667        83.33333    C    ZAF    3         2013  4
#  9: 11881.667        83.33333    C    ZAF    3         2014  4
# 10: 11881.667        83.33333    C    ZAF    3         2015  4
# 11:  2556.000        12.00000    B    CAN    1         2013  5
# 12:  3665.000        16.00000    B    HLT    1         2013  6

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有条件地填充数据框的行

来自分类Dev

熊猫有条件地创建新的数据框列

来自分类Dev

有条件地创建数据库和表

来自分类Dev

熊猫有条件地创建新的数据框列

来自分类Dev

根据前n行有条件地创建新列

来自分类Dev

根据行值有条件地创建新列

来自分类Dev

使用TSQL有条件地创建存储过程

来自分类Dev

在SQlite中有条件地创建表

来自分类Dev

MySQL有条件地创建表

来自分类Dev

有条件地在R中创建列

来自分类Dev

根据单独的字典有条件地创建字典

来自分类Dev

如何有条件地创建列表?

来自分类Dev

在Titan中有条件地创建顶点

来自分类Dev

有条件地创建数组(Javascript)

来自分类Dev

有条件地创建新的观察

来自分类Dev

有条件地选择一部分数据框行

来自分类Dev

熊猫-根据行值有条件地为新列选择数据的源列

来自分类Dev

R中按行有条件地联接数据帧

来自分类Dev

有条件地删除数据框中的行

来自分类Dev

有条件地对数据帧的每一行进行计数

来自分类Dev

有条件地通过PHP计算MYSQL列的行和输出数据

来自分类Dev

有条件地替换丢失的数据熊猫

来自分类Dev

有条件地过滤数据透视表

来自分类Dev

在dplyr中有条件地突变数据

来自分类Dev

有条件地选择熊猫DataFrame中的数据

来自分类Dev

过滤数据以有条件地渲染元素

来自分类Dev

有条件地从数据框中删除

来自分类Dev

在AngularJS中有条件地绑定数据

来自分类Dev

如何有条件地抓取网站数据?