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

根据数据中的值创建两列。r中的框架

金皓君
2023-03-14

我有一张800万行的大桌子。此表有15列带有数值,但这些值只能是0,并且只能是该列特有的另一个数值。我想根据特定值为这些列中的每一列创建两个新列。这些新值总是特定于列。

这是我的数据外观的虚拟示例

mydf1 <- data.frame(ID=1:5, c1n=c(0,1,0,0,1), c2n=c(2,0,2,0,0), c3n=c(0,0,0,3,3))

这是我想要的输出

 > mydf2
   ID c1n c1n_ctr c1n_cas c2n c2n_ctr c2n_cas c3n c3n_ctr c3n_cas
#1  1   0       0       0   2      25      55   0       0       0
#2  2   1      10     100   0       0       0   0       0       0
#3  3   0       0       0   2      25      55   0       0       0
#4  4   0       0       0   0       0       0   3     580    1002
#5  5   1      10     100   0       0       0   3     580    1002

对应关系始终相同,即c1n中1的值为(10,100)c2n中2的值为(25,55)c3n中3的值为(580,1002)

我知道我可以用这样的东西

 mydf3 <- mutate(mydf1, c1n_ctr = ifelse(c1n == 1, 10, 0)) %>%
        mutate(c1n_cas = ifelse(c1n ==1, 100, 0)) %>%
            mutate(c2n_ctr = ifelse(c2n ==2, 25, 0)) %>%
            mutate(c2n_cas = ifelse(c2n ==2, 55, 0)) %>%
            mutate(c3n_ctr = ifelse(c3n ==3, 580, 0)) %>%
            mutate(c3n_cas = ifelse(c3n ==3, 1002, 0)) 

但我的真实数据有15列,需要大量的复制粘贴,有没有干净的方法?

共有1个答案

益清野
2023-03-14

假设您必须以某种方式写下具体值,那么您可以使用这种方法。

library(dplyr)
mydf1 <- data.frame(ID=1:5, c1n=c(0,1,0,0,1), c2n=c(2,0,2,0,0), c3n=c(0,0,0,3,3))

c1 <- data.frame(c1n=1, c1n_ctr=10, c1n_cas=100)
c2 <- data.frame(c2n=2, c2n_ctr=25, c2n_cas=55)
c3 <- data.frame(c3n=3, c3n_ctr=580, c3n_cas=1002)

mydf3 <- 
    mydf1 %>% 
    left_join(c1) %>% 
    left_join(c2) %>% 
    left_join(c3) %>% 
    mutate_if(is.numeric, funs(ifelse(is.na(.), 0, .)))
 类似资料:
  • 我正在尝试计算多个列的中值,但是我的数据有点奇怪。它看起来像下面的示例。 在表中到列表示该值的出现次数。我想计算中位数的出现次数。 例如对于ID = 1 是我想要创建的计算。 对于ID=2 我尝试过使用<code>rep()或<code>rep(10,2)),这就是我所期望的。我只是努力创建一个列表或向量,每个列都有重复。

  • 我有两个熊猫数据框 步骤1:根据df1中唯一的“val”在df2中创建列,如下所示: 步骤2:对于flag=1的行,AA_new将计算为var1(来自df2)*组“A”和val“AA”的df1的'cal1'值*组“A”和val“AA”的df1的'cal2'值,类似地,AB_new将计算为var1(来自df2)*组“A”和val“AB”的df1的'cal1'值*组“A”和val“AB”的df1的'c

  • 我想从我的Pandas数据帧列中创建一个唯一值的计数,然后将这些计数添加到原始数据帧中的新列。我尝试了一些不同的方法。我创建了一个熊猫系列,然后用value_counts方法计算计数。我试图将这些值合并回我的原始数据框,但我想要合并的键在索引(ix/loc)中。 我想退货,比如:

  • 我正在寻找一个整洁的解决以下问题。 我有以下示例数据集: 我需要根据列2和列1中的前一个值填写NAs。如果我从第一个NA(第1列,第2行)开始,并且第2列大于1,那么我将把第1列的值(第1行)乘以第2列的值。那么如果col2小于等于1,那么col1正好等于前面的值。 这应该是最终结果: 我尝试了但没有得到想要的结果: 显然,我没有捕获我想要使用前一行的值的部分。任何帮助都将不胜感激。

  • 我有两个共享分组ID的数据帧。我希望根据另一个设置的条件在其中创建一个日期序列。MRE如下: 在这个例子中,我想在 中创建一列日期,从 中的下一个日期开始(每个组 - 组中的 在 中, 在 中)。 具有数据。表中,这些(可怕的)方法都不起作用: 我一直在尝试数据。表方法,因为它们被认为更快(而且实际数据相当大),但实际上,任何(合理的)方法都可以。 我的预期结果是一个看起来像这样的 data.fr

  • 我有两个pyspark数据帧 DF1 : df2: 我想向df1添加一个列Location_Id,从df2获取匹配的Id,如下所示: 我如何才能做到这一点?