相关疑难解决方法(0)

连接字符串不能按预期工作

我知道这是一个常见的问题,但是在寻找参考资料和其他材料时,我找不到这个问题的明确答案.

请考虑以下代码:

#include <string>

// ...
// in a method
std::string a = "Hello ";
std::string b = "World";
std::string c = a + b;
Run Code Online (Sandbox Code Playgroud)

编译器告诉我它找不到重载的运算符char[dim].

这是否意味着在字符串中没有+运算符?

但在几个例子中,存在类似这样的情况.如果这不是连接更多字符串的正确方法,那么最好的方法是什么?

c++ string-concatenation standard-library stdstring operator-keyword

84
推荐指数
4
解决办法
22万
查看次数

合并列以删除NA

我在R中有一些列,每行只有一个值,其余的将是NA的.我想将这些组合成一个具有非NA值的列.有谁知道这样做的简单方法.例如,我可以如下:

data <- data.frame('a' = c('A','B','C','D','E'),
                   'x' = c(1,2,NA,NA,NA),
                   'y' = c(NA,NA,3,NA,NA),
                   'z' = c(NA,NA,NA,4,5))
Run Code Online (Sandbox Code Playgroud)

所以我会的

'a' 'x' 'y' 'z'  
 A   1   NA  NA  
 B   2   NA  NA  
 C  NA   3   NA  
 D  NA   NA  4  
 E  NA   NA  5
Run Code Online (Sandbox Code Playgroud)

而且我会得到

 'a' 'mycol'  
  A   1  
  B   2  
  C   3  
  D   4  
  E   5  
Run Code Online (Sandbox Code Playgroud)

包含NA的列的名称根据查询中较早的代码而更改,因此我将无法显式调用列名,但是我将包含NA的列的列名称存储为向量,例如,在此示例中cols <- c('x','y','z'),所以可以调用列data[, cols].

任何帮助,将不胜感激.

谢谢

merge r na

35
推荐指数
5
解决办法
3万
查看次数

将Rcpp :: CharacterVector转换为std :: string

我试图在Rcpp函数中打开一个文件,所以我需要文件名作为char*或std :: string.

到目前为止,我尝试过以下方法:

#include <Rcpp.h>
#include <boost/algorithm/string.hpp>
#include <fstream>
#include <string>

RcppExport SEXP readData(SEXP f1) {
    Rcpp::CharacterVector ff(f1);
    std::string fname = Rcpp::as(ff);
    std::ifstream fi;
    fi.open(fname.c_str(),std::ios::in);
    std::string line;
    fi >> line;
    Rcpp::CharacterVector rline = Rcpp::wrap(line);
    return rline;
}
Run Code Online (Sandbox Code Playgroud)

但显然,因为我得到编译时错误as不起作用Rcpp::CharacterVector.

foo.cpp: In function 'SEXPREC* readData(SEXPREC*)':
foo.cpp:8: error: no matching function for call to 'as(Rcpp::CharacterVector&)'
make: *** [foo.o] Error 1
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法从参数中获取字符串或以某种方式从Rcpp函数参数中打开文件?

c++ r rcpp

21
推荐指数
2
解决办法
8052
查看次数

粘贴两个data.table列

dt <- data.table(L=1:5,A=letters[7:11],B=letters[12:16])
   L A B
1: 1 g l
2: 2 h m
3: 3 i n
4: 4 j o
5: 5 k p
Run Code Online (Sandbox Code Playgroud)

现在我想粘贴"A"和"B"列来获得一个新的,我们称之为"新":

dt2
   L A B new
1: 1 g l  gl
2: 2 h m  hm
3: 3 i n  in
4: 4 j o  jo
5: 5 k p  kp
Run Code Online (Sandbox Code Playgroud)

r data.table

11
推荐指数
2
解决办法
9769
查看次数

如何在R中的值为NA时跳过paste()参数

我有一个包含城市,州和国家列的数据框.我想创建一个串联的字符串:"城市,州,国家".但是,我的一个城市没有州(有一个国家NA).我希望那个城市的字符串是"城市,乡村".以下是创建错误字符串的代码:

# define City, State, Country
  city <- c("Austin", "Knoxville", "Salk Lake City", "Prague")
  state <- c("Texas", "Tennessee", "Utah", NA)
  country <- c("United States", "United States", "United States", "Czech Rep")
# create data frame
  dff <- data.frame(city, state, country)
# create full string
  dff["string"] <- paste(city, state, country, sep=", ")
Run Code Online (Sandbox Code Playgroud)

当我显示时dff$string,我得到以下内容.请注意,最后一个字符串有一个NA,,不需要:

> dff["string"]
                               string
1        Austin, Texas, United States
2 Knoxville, Tennessee, United States
3 Salk Lake City, Utah, United States
4 …
Run Code Online (Sandbox Code Playgroud)

r paste dataframe na

6
推荐指数
2
解决办法
6961
查看次数

R字符串操作:我怎么能优化这个?

TL; DR:我想通过左边的给定字符将列表的每个字符串填充到给定的大小.我想快点.请参阅下面的代码并举例说明

我有很大的字符串向量,包含......很好的东西,但最大(已知)字符数.我希望通过将Zero's留给给定大小来完成thoose字符串(优于char的最大数量)

假设:

c("yop",NA,"1234567","19","12AN","PLOP","5689777")
Run Code Online (Sandbox Code Playgroud)

假设客观大小为10,我希望:

[1] "0000000yop" NA "0001234567" "0000000019" "00000012AN" "000000PLOP" "0005689777"
Run Code Online (Sandbox Code Playgroud)

结果,尽可能快.

我试着写自己的,但它不是很快......你能帮助我加快速度吗?我有数十亿的待办事项.

这是我的实际代码:

library(purrr)
zero_left <- function(field,nb){
  map2_chr(
    map(abs(nb-nchar(field)),~ rep("0",.x)),
    field,
    ~ paste0(c(.x,.y),collapse=""))
}

trial <- c("yop","1234567","19","12AN","PLOP","5689777")
zero_left(trial,10)
Run Code Online (Sandbox Code Playgroud)

这段代码甚至不处理NA案例...但没有它它可行,但太慢了.

printf r

3
推荐指数
1
解决办法
64
查看次数

将列粘贴在一起,不使 NA 成为字符

我有一个相当大的数据集,其中有多个缺失值和重复值。我的第一个目标是创建一个新列 ( Name),它由三个现有列组成,例如FirstNameMiddleInitialLastName

我努力了:

owners4$Name <- paste(owners4$FirstName, owners4$MiddleInitial, owners4$LastName)
Run Code Online (Sandbox Code Playgroud)

但这会导致NAs 被粘贴为字符而不仅仅是 NA。之后,我将删除NA新列中包含 的每一行。

有人确定我可以实现这一目标吗?

r na

3
推荐指数
1
解决办法
2598
查看次数

粘贴字符向量,删除NA之间的NA和分隔符

我有几个我要粘贴在一起的字符向量.问题是一些字符向量非常稀疏.所以,当我粘贴它们时,我会得到NA和额外的分隔符.如何在仍然加入向量的同时有效地移除NA和额外的分隔符?

我有类似的东西:

n1 = c("goats", "goats", "spatula", NA, "rectitude", "boink")
n2 = c("forever", NA, "...yes", NA, NA, NA)
cbind(paste(n1,n2, sep=", "))
Run Code Online (Sandbox Code Playgroud)

这给了我:

[1,] "goats, forever" 
[2,] "goats, NA"      
[3,] "spatula, ...yes"
[4,] "NA, NA"         
[5,] "rectitude, NA"  
[6,] "boink, NA" 
Run Code Online (Sandbox Code Playgroud)

但我想要:

[1,] "goats, forever" 
[2,] "goats"          
[3,] "spatula, ...yes"
[4,] <NA>
[5,] "rectitude"      
[6,] "boink"
Run Code Online (Sandbox Code Playgroud)

使用大量正则表达式和字符串拆分,显然效率低下且乏味乏味.但任何快速/简单的事情?

regex string r

0
推荐指数
2
解决办法
205
查看次数