我正在寻找在 R 中同时迭代两个或多个字符向量/列表的方法。有没有办法做类似的事情:
foo <- c('a','c','d')
bar <- c('aa','cc','dd')
for(i in o){
print(o[i], p[i])
}
Run Code Online (Sandbox Code Playgroud)
期望的结果:
'a', 'aa'
'c', 'cc'
'd', 'dd'
Run Code Online (Sandbox Code Playgroud)
在Python中我们可以简单地做:
foo = ('a', 'c', 'd')
bar = ('aa', 'cc', 'dd')
for i, j in zip(foo, bar):
print(i, j)
Run Code Online (Sandbox Code Playgroud)
但我们可以在 R 中做到这一点吗?
您知道有什么现成的方法可以获取两个字符串的长度和重叠吗?然而只有与R,也许有什么来自stringr?我正在寻找这里,不幸的是没有成功。
str1 <- 'ABCDE'
str2 <- 'CDEFG'
str_overlap(str1, str2)
'CDE'
str_overlap_len(str1, str2)
3
Run Code Online (Sandbox Code Playgroud)
其他例子:
str1 <- 'ATTAGACCTG'
str2 <- 'CCTGCCGGAA'
str_overlap(str1, str2)
'CCTG'
str_overlap_len(str1, str2)
4
Run Code Online (Sandbox Code Playgroud)
///
str1 <- 'foobarandfoo'
str2 <- 'barand'
str_overlap(str1, str2)
'barand'
str_overlap_len(str1, str2)
6
Run Code Online (Sandbox Code Playgroud)
/// 是的,两个解决方案,总是选择总是重叠
str1 <- 'EFGABCDE'
str2 <- 'ABCDECDE'
str_overlap(str1, str2)
'ABCDE'
str_overlap_len(str1, str2)
5
Run Code Online (Sandbox Code Playgroud)
我想知道是否有自制的小功能,比如这个?
我实现了最长增加子序列(LIS)算法,因为我认为它会起作用,但结果完全是混乱的.
def lis():
#D = map(int, raw_input().split())
D = [3, 2, 6, 4, 5, 1]
L = [[] for i in range(len(D))]
L[0].append(D[0])
for i in range(len(D)):
for j in range(0,i):
if D[i] > D[j]:
L[i] = L[j]
L[i].append(D[i])
print L
Run Code Online (Sandbox Code Playgroud)
返回结果:
[[3], [2, 6, 4, 5], [2, 6, 4, 5], [2, 6, 4, 5], [2, 6, 4, 5], [1]]
Run Code Online (Sandbox Code Playgroud)
应该是什么:
[[3], [2], [2, 6], [2, 4], [2, 4, 5], [1]]
Run Code Online (Sandbox Code Playgroud)
正如我在调试器中看到的那样:
L[i] = L[j]
Run Code Online (Sandbox Code Playgroud)
不仅L[i]获得新值 …
我花了一些时间寻找解决方案,但是我失败了......就像标题中一样,实际上我不知道如何解释,所以示例 df:
A <- c('ABC','GHI',rep(NA,3))
B <- c('AAB','ABC','BCE','CAB',NA)
C <- c('ABC','BCE','GHI','XXX','ZZZ')
D <- c('BCE',rep(NA,4))
E <- c('GHI','ZZZ','BAR',rep(NA,2))
df <- data.frame(A,B,C,D,E)
A B C D E
1 ABC AAB ABC BCE GHI
2 GHI ABC BCE <NA> ZZZ
3 <NA> BCE GHI <NA> BAR
4 <NA> CAB XXX <NA> <NA>
5 <NA> <NA> ZZZ <NA> <NA>
Run Code Online (Sandbox Code Playgroud)
现在我想对行重新排序,使每行具有相同的值,或者NA如果某些列中不存在特定值。期望的输出:
A B C D E
1 ABC ABC ABC NA NA
2 GHI NA GHI NA GHI
3 NA AAB NA NA …Run Code Online (Sandbox Code Playgroud) 我有一个小任务要做,不幸的是我不熟悉这个统计领域......实际上我确实需要计算(我不是在寻找现成的解决方案),但是我不知道它们是否\是正确的,也是我的思维方式,因此,如果您看一下并指出我的错误,我将非常感激。
\n\n这是假数据,显示了狗和猫的增长率(完全是虚构的):
\n\ntime <- c(1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10)\na <- rep(\'dog\', 10)\nb <- rep(\'cat\', 10)\nanimal <- c(a,b)\nval <- c(2.00,8.00,17.00,21.00,29.00,37.00,41.00,56.00,67.00,82.00,1.00,3.00,6.00,8.00,11.00,15.00,21.00,26.00,31.00,37.00)\ndata <- data.frame(time,animal,val)\nRun Code Online (Sandbox Code Playgroud)\n\n细看:
\n\nrequire(ggplot2)\nggplot(data, aes(time, val, color=animal)) +\n stat_summary(fun.data=mean_se, geom="pointrange") +\n geom_point()\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n正如你所见,狗比猫长得快——这可能是我的假设。但是我需要做一些统计来证实它。
\n\n所以我决定进行生长曲线分析(GCA)。\n我是根据这个教程来的。下面是我的结果和简要说明。
\n\n首先,我制作了一个基本模型,对每只动物进行随机截距:
\n\nm.base <- lmer(val ~ time + (1 | animal), data=data, REML = F)\nRun Code Online (Sandbox Code Playgroud)\n\n这里我遇到了问题,实际上我在这里没有任何固定效应,我的数据集很简单,我想知道的是我的两组(狗和猫)的时间增长率在统计上显着不同。\ n换句话说。\n这段时间动物的生长速度有变化吗?
\n\n因此我把我的动物作为额外的固定效果:
\n\nm.1 <- lmer(val ~ time * animal + (1 | animal), data=data, REML = …Run Code Online (Sandbox Code Playgroud) 我有一个数据框:
set.seed(100)
A <- floor(runif(5, min=0, max=10))
B <- floor(runif(5, min=0, max=10))
C <- floor(runif(5, min=0, max=10))
D <- floor(runif(5, min=0, max=10))
df <- data.frame(A,B,C,D)
df$ms <- rowMeans(df)
df
A B C D ms
1 3 4 6 6 4.75
2 2 8 8 2 5.00
3 5 3 2 3 3.25
4 0 5 3 3 2.75
5 4 1 7 6 4.50
Run Code Online (Sandbox Code Playgroud)
现在,当 A 列和 B 列中特定行的值低于平均值且 C 列和 D 列中的值也高于平均值时,我想添加带有列名称的列(较低和较大)。期望的结果:
A B C D ms lower greater …Run Code Online (Sandbox Code Playgroud)