在r中循环字符串
我想知道我的代码出了什么问题,而不是解决方案。我希望循环一些字符串我的数据如下:在r中循环字符串,r,loops,R,Loops,我想知道我的代码出了什么问题,而不是解决方案。我希望循环一些字符串我的数据如下: id source transaction 1 a > b 6 > 0 2 J > k 5 3 b > c 4 > 0 我有一个列表,希望浏览这个列表,找到包含该元素的行并计算平均值 mylist <- c ("a", "b") 我不知道该由谁循环列表并将其发送到csv文件。我试过这个 myli
id source transaction
1 a > b 6 > 0
2 J > k 5
3 b > c 4 > 0
我有一个列表,希望浏览这个列表,找到包含该元素的行并计算平均值
mylist <- c ("a", "b")
我不知道该由谁循环列表并将其发送到csv文件。我试过这个
mylist <- c( "a", "b" )
for(i in mylist)
{
KeepData <- df [grepl(i, df$source), ]
KeepData <- cSplit(KeepData, "transaction", ">", "long")
avg<- mean(KeepData$transactions)
result <- list(i,avg )
write.table(result ,file="C:/Users.csv", append=TRUE,sep=",",col.names=FALSE,row.names=FALSE)
}
mylist我们可以使用cSplit
拆分“源”并将数据集转换为“长”格式,然后指定“i”,按“源”分组,获得“事务”的平均值(使用data.table
方法)
或者另一个选项是从tidyr
中分离行
以转换为“长”格式,然后在按“源”分组后使用dplyr
方法进行汇总
library(tidyr)
library(dplyr)
separate_rows(df1, source) %>%
filter(source %in% mylist) %>%
group_by(source) %>%
summarise(avg = mean(transaction))
cSplit(df2, 2:3, " > ", "long")[source %in% my_list, .(avg = mean(transaction)), source]
# source avg
#1: a 6
#2: b 2
更新
对于新的数据集('df2'),我们需要将两列拆分为“long”格式,然后获得按“source”分组的“transaction”的mean
library(tidyr)
library(dplyr)
separate_rows(df1, source) %>%
filter(source %in% mylist) %>%
group_by(source) %>%
summarise(avg = mean(transaction))
cSplit(df2, 2:3, " > ", "long")[source %in% my_list, .(avg = mean(transaction)), source]
# source avg
#1: a 6
#2: b 2
可将
循环的修改为
for(i in mylist) {
KeepData <- cSplit(df2, 2:3, ">", "long")
KeepData <- KeepData[grepl(i, source)]
avg<- mean(KeepData$transaction)
result <- list(i,avg )
print(result)
write.table(result ,file="C:/Users.csv",
append=TRUE,sep=",",col.names=FALSE,row.names=FALSE)
}
#[[1]]
#[1] "a"
#[[2]]
#[1] 6
#[[1]]
#[1] "b"
#[[2]]
#[1] 2
for(mylist中的i){
KeepData Thank@akrun它适用于此示例,但我主要希望知道在我的情况下应用此代码有什么问题,在我的工作中,事务列也类似于2>3。我如何应用于that@MFR你是说交易栏是character
class?从评论中不清楚hanks@akrun是否%my_list
中的source!%计算不包括在我的列表中的源的平均值?@MFR您必须使用!在%my_list
中的source%您确定新数据的预期平均值正确吗for
循环的一个问题是检查Cplit
的输出和它上面的一个,即grepl。使用print
对于每个步骤,您都会了解原因,这里的事务
列在cSplit
之后被复制,而且它不是事务
df1 <- structure(list(id = 1:3, source = c("a > b", "J > k", "b > c"
), transaction = c(6L, 5L, 4L)), .Names = c("id", "source", "transaction"
), class = "data.frame", row.names = c(NA, -3L))
df2 <- structure(list(id = 1:3, source = c("a > b", "J > k", "b > c"
), transaction = c("6 > 0", "5", "4 > 0")), .Names = c("id",
"source", "transaction"), class = "data.frame", row.names = c(NA,
-3L))