我有一个这样的数据集:
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) 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) 我有一个包含许多列的数据集,我想找到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)
实现这一目标的另一种方式是什么,希望更简洁?
我有一个示例数据框,我想通过将多个列上的先前值相加来从中计算一个值。
我有一个数据框 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)
但我无法让它工作。
任何帮助表示赞赏。
先感谢您
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", 的起始值H为0。如果g=="b"那么的起始值H是从何时开始的最后一个值g=="a"
假设我有一个数据框列表,如下所示:
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 个数据集,因此可能需要多个条件。
我找不到这个问题的答案,但也许我查找了错误的关键字,如果是这种情况,请提前抱歉。基本上我有一个如下所示的数据框:
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 中创建一个包含来自另一列的值的新列,但我需要重新分配它们。这是一个示例:数据如下所示:
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)
我尝试使用此代码,但它给我错误地分配了某些值,我不知道为什么 …
我有以下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列,然后仅返回gender和Freq列。如何在一行代码中完成此操作,而无需显式引用该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 …
在超过 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 方法,有什么替代方法?