如何解决遍历r
我想创建一个给定字符串的函数,该函数迭代数据框的行名,并在它们相等的情况下存储其值。这里我举一个玩具的例子:
Places x1 x2 x3 x4 x5
A 0 5 0 0 0
B 0 0 0 23 0
C 23 0 0 0 0
D 8 0 0 0 0
我想要这样的东西:
sequence <- ("ACF")
function(sequence)
>> 0 5 0 0 0 23 0 0 0 0
“ A”位于数据框的行名中,“ C”也是如此,因此该函数将其值存储在新向量中。
codification <- function(sequence) {
bits <- vector()
for (i in sequence){
if (any(rownames(dataframe)==i)){
bits <- bits.append()
}
}
}
我认为该函数的其余部分都正常工作,但是我找不到要在bits <- bits.append()
中写入的任何内容来存储值。任何帮助将不胜感激。
解决方法
您不需要for循环。只是一些基数R。
df <- read.table(text = "Places x1 x2 x3 x4 x5
A 0 5 0 0 0
B 0 0 0 23 0
C 23 0 0 0 0
D 8 0 0 0 0",header = TRUE)
codification <- function(sequence){
unlist(asplit(df[na.omit(match(strsplit(sequence,"")[[1]],df$Places)),-1],1),use.names = FALSE)
}
codification("ACF")
#> [1] 0 5 0 0 0 23 0 0 0 0
codification("AACF")
#> [1] 0 5 0 0 0 0 5 0 0 0 23 0 0 0 0
由reprex package(v0.3.0)于2020-10-24创建
但是,如果这些实际上是行名,那么您需要这样做:
df <- read.table(text = " x1 x2 x3 x4 x5
A 0 5 0 0 0
B 0 0 0 23 0
C 23 0 0 0 0
D 8 0 0 0 0",header = TRUE)
codification <- function(sequence){
sequence <- strsplit(sequence,"")[[1]]
sequence <- sequence[sequence %in% rownames(df)]
unlist(asplit(df[sequence,],use.names = FALSE)
}
codification("ACF")
#> [1] 0 5 0 0 0 23 0 0 0 0
codification("AACF")
#> [1] 0 5 0 0 0 0 5 0 0 0 23 0 0 0 0
由reprex package(v0.3.0)于2020-10-24创建
我还是建议您创建一个以df作为输入的函数。
codification <- function(sequence,df){
# ...
}
在函数内部使用外部对象并不是很好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。