很抱歉标题不够清晰 - 我很难解释我的需要。
我有一个data.frame
包含文字,例如:
text <- c("a",
"bb",
"c ccc",
"fff")
text_df <- data.frame(line = 1:length(text), text = text, stringsAsFactors = FALSE)
此外,我有一个包含我想要交叉引用的文本的列表:
lol <- list(c('a', 'aa', 'aaa'),
c('d', 'dd', 'ddd'),
c('e', 'ee', 'eee'),
c('c', 'cc', 'ccc', 'cccc'),
c('b', 'bb', 'bbb'),
c('f', 'ff', 'fff'))
我想要做的是:对于text_df
中每一行中的每个字符串,我想查看lol
中任何一个子列表中是否存在相应的字符串,如果匹配为{ {1}},我想将此子列表附加到TRUE
。
这样操作的最终结果就是:
text_df
我真的不明白该怎么做。我想,伪代码看起来像这样:
>text_df_new
line text
1 a aa aaa
2 b bb bbb
3 c cc ccc cccc
4 f ff fff
或许也有办法对此进行矢量化?
答案 0 :(得分:0)
我认为这可以根据您的数据完成您想要的内容:
#include <stdio.h>
int LowWatts(int burritos);
int MediumWatts(int burritos);
int HighWatts(int burritos);
int main ()
{
int burritos, menuSelect;
float Results;
burritos = (double)1;
while (burritos > 0)
{
printf ("Enter the amount of burritos you wish to cook \n: ");
scanf("%d", &burritos);
printf("%d\n", burritos);
if (burritos > 0)
{
printf ("Enter 1 1100W, 2 to 1200W, 3 1250W microwave \n: ");
scanf("%d", &menuSelect);
printf("%d\n", menuSelect);
if (menuSelect == 1)
{
Results = LowWatts(burritos);
printf("For %d burrito(s) %.2f minutes is recomended for "
"1100W microwave\n", burritos, Results);
}
else if (menuSelect == 2)
{
Results = MediumWatts(burritos);
printf("For %d burrito(s) %.2f minutes is recomended for "
"1200W microwave\n", burritos, Results);
}
else if (menuSelect == 3)
{
Results = HighWatts(burritos);
printf("For %d burrito(s) %.2f minutes is recomended for "
"1250W microwave\n", burritos, Results);
}
else
printf("\nInvalid selection, please choose 1, 2, or 3 \n");
}
}
return 0;
}
int LowWatts(int burritos)
{
return (double)(burritos*1.10);
}
int MediumWatts(int burritos)
{
return burritos*1.00;
}
int HighWatts(int burritos)
{
return burritos*0.55;
}
我知道这不是一个非常&#34; R&#34;方法,所以我猜测一个真正的R用户会知道如何使用check_text <- function(df, list){
tdf <- df
for(i in 1:length(df$text)){
x <- unlist(strsplit(df$text[i], split = " "))
for(j in x){
for(k in lol){
for(l in k){
if(j == l){
tdf$text[i] <- paste(k, collapse = " ")
}
}
}
}
}
return(tdf)
}
text_df_new <- check_text(text_df, lol)
> text_df_new
line text
1 1 a aa aaa
2 2 b bb bbb
3 3 c cc ccc cccc
4 4 f ff fff
或其他一些我仍然无法真正做到的其他函数在大约2行中做同样的事情我还没把头包住。但是,如果您的数据集很小,则可能没问题。