小编Ano*_*n R的帖子

从 R 中的数据框中拆分逗号分隔模式

我有一个这样的数据集:

Old <- data.frame(
  X1= c(
    "AD=17795,54;ARL=139;DEA=20;DER=20;DP=1785",
    "DP=4784;AD=4753,23;ARL=123;DEA=5;DER=5",
    "ARL=149;AD=30,9;DEA=25;DER=25;DP=3077",
    "AD=244,49;ARL=144;DEA=7;DER=7;DP=245"
    ))


X1
AD=17795,54;ARL=139;DEA=20;DER=20;DP=1785
DP=4784;AD=4753,23;ARL=123;DEA=5;DER=5
ARL=149;AD=30,9;DEA=25;DER=25;DP=3077
AD=244,49;ARL=144;DEA=7;DER=7;DP=245 
Run Code Online (Sandbox Code Playgroud)

我想提取“;” AD=xxx,xx 的单独值比添加到新列:所需的输出是:

X1                                              X2
AD=17795,54;ARL=139;DEA=20;DER=20;DP=1785       17795,54
DP=4784;AD=4753,23;ARL=123;DEA=5;DER=5          4753,23
ARL=149;AD=30,9;DEA=25;DER=25;DP=3077           30,9
AD=244,49;ARL=144;DEA=7;DER=7;DP=245            244,49
Run Code Online (Sandbox Code Playgroud)

我试过了:

Old$X2<-mapply(
  function(x,  i) x[i],
  strsplit(X1, ";"),
  lapply(strsplit(X1, ";"), function(x) which(x == "AD="))
)
Run Code Online (Sandbox Code Playgroud)

regex r strsplit dataframe

4
推荐指数
3
解决办法
63
查看次数

使用列范围或选择模式计算(按行)列

gl <- tibble::tribble(
                   ~X4010, ~X4020, ~X4030,  ~X5010, ~X5020, ~X5030, ~X5040,
                     1000,    100,     10,     500,    100,     50,      5,
                     1100,    110,     11,     550,    110,     55,    5.5,
                     1210,    121,   12.1,     605,    121,   60.5,   6.05,
                     1331,  133.1,  13.31,   665.5,  133.1,  66.55,   6.65,
                   1464.1, 146.41,  14.64,  732.05, 146.41,   73.2,   7.32,
                  1610.51, 161.05,   16.1,  805.25, 161.05,  80.52,   8.05,
                  1771.56, 177.15,  17.71,  885.78, 177.15,  88.57,   8.85,
                  1948.71, 194.87,  19.48,  974.35, 194.87,  97.43,   9.74,
                  2143.58, 214.35,  21.43, 1071.79, 214.35, 107.17,  10.71,
                  2357.94, 235.79,  23.57, 1178.97, 235.79, 117.89,  11.78 …
Run Code Online (Sandbox Code Playgroud)

r dplyr

3
推荐指数
1
解决办法
55
查看次数

在 R 中,如何将数据框中的许多选择(二进制)列更改为因子?

我有一个包含许多列的数据集,我想找到n响应少于唯一响应的列,并将这些列更改为因子。

这是我能够做到的一种方法:

#create sample dataframe
df <- data.frame("number" = c(1,2.7,8,5), "binary1" = c(1,0,1,1), 
"answer" = c("Yes","No", "Yes", "No"), "binary2" = c(0,0,1,0))
n <- 3

#for each column
for (col in colnames(df)){
#check if the first entry is numeric
  if (is.numeric(df[col][1,1])){
# check that there are fewer than 3 unique values
    if ( length(unique(df[col])[,1]) < n ) {
    df[[col]] <- factor(df[[col]])
                                           }
                               }
                         }
Run Code Online (Sandbox Code Playgroud)

实现这一目标的另一种方式是什么,希望更简洁?

r dataframe

3
推荐指数
1
解决办法
60
查看次数

通过在 r 中的多列上相加上一行的值来计算数字

我有一个示例数据框,我想通过将多个列上的先前值相加来从中计算一个值。

我有一个数据框 df:

LK   Loc1  Loc2  Loc3    
1     13   22     0          
2     20   18     4          
3     12   21     2          
4     2     0     1          
5     1     2     0 
Run Code Online (Sandbox Code Playgroud)

我想进入一个新的数据框:

 LK   Loc1  Loc2  Loc3    
  1     13   22     0          
  2     33   40     4          
  3     45   61     6          
  4     47   61     7          
  5     48   63     7
Run Code Online (Sandbox Code Playgroud)

我尝试了一些东西:

df2 <- df %>% 
  mutate_at(vars(-LK), accumulate(function(.) (.) * 0.99))
Run Code Online (Sandbox Code Playgroud)

但我无法让它工作。

任何帮助表示赞赏。

先感谢您

r dplyr

3
推荐指数
1
解决办法
36
查看次数

R:递归添加行

j 个表面接触后手部细菌的浓度可以由以下递归关系决定:

H[j+1]=H[j]+T[j]*(S[j]-H[j])
Run Code Online (Sandbox Code Playgroud)

S手触摸的表面浓度在哪里(为了方便,假设是随机的)。T是每个接触的传输效率。我想计算最终的手部浓度(起始浓度为零)。

我有一个数据框,它有一个表面接触向量和每个表面的传输效率。我有两个组a&b并且在每个组中假设我将依次触摸每个组1:length(df)

 df <- data.frame(S = runif(10)*100, T = runif(10),g=rep(c("a","b"),each=5))
Run Code Online (Sandbox Code Playgroud)

我想在可能的情况下计算H按组计算的累积总和dplyr

一个特例:

如果g = "a", 的起始值H0。如果g=="b"那么的起始值H是从何时开始的最后一个值g=="a"

r accumulate dplyr rolling-computation purrr

3
推荐指数
2
解决办法
167
查看次数

如何根据列表中每个元素的名称使用map_if

假设我有一个数据框列表,如下所示:

df1 <- data.frame(a1 = 1:5, a2 = 1:5, a3 = 1:5)
df2 <- data.frame(a1 = 1:3, a2 = 2:4, a3 = 3:5)
df3 <- data.frame(a1 = 10:20, a2 = 5:15)

l <- list(df1 = df1, df2 = df2, df3 = df3)
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能mutate对列表中的每个元素执行操作(如 )以元素名称为条件?

例如 - 如果我想仅在处理df1或时添加一些新列df3,并且如果我正在处理时想删除某些列,我将如何进行df2

可以map_if处理吗?

PS:请记住,该列表可能包含超过 3 个数据集,因此可能需要多个条件。

r dataframe dplyr purrr tidyverse

3
推荐指数
1
解决办法
623
查看次数

基于列模式和其他列的新列

我找不到这个问题的答案,但也许我查找了错误的关键字,如果是这种情况,请提前抱歉。基本上我有一个如下所示的数据框:

  code class Var1 Var2
1   U1     A    1    3
2   U2     A    5   43
3   U1     B    6    3
4   U2     B    6   12
5   U1     C   87    7
6   U2     C    1    8
Run Code Online (Sandbox Code Playgroud)

可以使用以下代码重现它:

df <- data.frame(code=c("U1","U2","U1","U2","U1","U2"),class = c("A","A","B","B","C","C"), Var1 = c(1,5,6,6,87,1), Var2 = c(3,43,3,12,7,8))

我想通过基于“类”列模式和其他列创建新列,同时保持“代码”列不变,使其看起来像这样:

  Code Var1.A Var2.A Var1.B Var2.B Var1.C Var2.C
1   U1      1      3      6      3     87      7
2   U2      5     43      6     12      1      8
Run Code Online (Sandbox Code Playgroud)

可以使用此行重现第二个数据帧:

df2 <- data.frame(Code=c("U1","U2"),Var1.A = c(1,5), Var2.A = c(3,43), …
Run Code Online (Sandbox Code Playgroud)

r reshape dataframe tidyr

3
推荐指数
1
解决办法
132
查看次数

从 R 中的另一列分配新值

我想在 R 中创建一个包含来自另一列的值的新列,但我需要重新分配它们。这是一个示例:数据如下所示:

ID column1  column2 
1  C*0421   C*0232
2  C*0531   C*0332
3  C*0502   C*0544
4  C*0432   C*0132
5  C*0632   C*0703
Run Code Online (Sandbox Code Playgroud)

所以我想要的是创建一个新列,它应该分配任何开头的内容:

C*04 should be C1
C*05 should be C2
C*07 should be C1
C*02 should be C2 
NA   should be NA
Run Code Online (Sandbox Code Playgroud)

最终结果应如下所示:

ID column1  column2   results_from_column1  results_from_column2     Combining_the_results
1  C*0421   C*0232     C1                        C2                       C1/C2
2  C*0531   C*0332     C2                        C1                       C2/C1
3  C*0502   C*0544     C2                        C2                       C2/C2  
4  C*0432   C*0132     C1                        C1                       C1/C1
5  C*0632   C*0703     C2                        C1                       C2/C1
Run Code Online (Sandbox Code Playgroud)

我尝试使用此代码,但它给我错误地分配了某些值,我不知道为什么 …

r dplyr

3
推荐指数
1
解决办法
61
查看次数

如何向 data.table 添加一列并返回多列而不修改基础数据?

我有以下data.table内容R

dt <- data.table(gender = c("Male", "Female"), Prop = c(0.49, 0.51))
#   gender Prop
# 1:   Male  0.49
# 2: Female  0.51
Run Code Online (Sandbox Code Playgroud)

我想计算一Freq = Prop * 1000列,然后仅返回genderFreq列。如何在一行代码中完成此操作,而无需显式引用该gender列且无需修改dt

我能做到的最好的办法是:

onsdist$gender[, c(.SD, Freq = Prop * 1000)][, .SD, .SDcols = - "Prop"]
#    gender Freq1 Freq2
# 1:   Male   490   490
# 2: Female   510   510
Run Code Online (Sandbox Code Playgroud)

但我最终得到了重复的Freq列。

(我不想引用的原因gender是因为它跨data.tables改变了。我不想修改的原因dt …

r dataframe data.table

3
推荐指数
1
解决办法
95
查看次数

Pandas 自动推断最佳数据类型:str 到 int 不起作用

在超过 100 列的数据框中,我希望 pandas (v1.4.2)自动将所有列转换为“最佳”数据类型。根据文档df.convert_dtypes()df.infer_objects()应该可以解决问题。考虑以下示例:

>>df = pd.DataFrame({"A":["1","2"], "C":["abc","bcd"]})
>>df
   A    C
0  1  abc
1  2  bcd

>>df.dtypes
A    object
C    object
dtype: object

>>df.convert_dtypes().dtypes
A    string
C    string
dtype: object

>>df.infer_objects().dtypes
A    object
C    object
dtype: object
Run Code Online (Sandbox Code Playgroud)

为什么列A没有转换成int?如果我尝试错误的 pandas 方法,有什么替代方法?

python dataframe pandas dtype

3
推荐指数
1
解决办法
784
查看次数