我知道这是一个常见的问题,但是在寻找参考资料和其他材料时,我找不到这个问题的明确答案.
请考虑以下代码:
#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
我在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].
任何帮助,将不胜感激.
谢谢
我试图在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函数参数中打开文件?
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) 我有一个包含城市,州和国家列的数据框.我想创建一个串联的字符串:"城市,州,国家".但是,我的一个城市没有州(有一个国家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) 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案例...但没有它它可行,但太慢了.
我有一个相当大的数据集,其中有多个缺失值和重复值。我的第一个目标是创建一个新列 ( Name),它由三个现有列组成,例如FirstName、MiddleInitial和LastName。
我努力了:
owners4$Name <- paste(owners4$FirstName, owners4$MiddleInitial, owners4$LastName)
Run Code Online (Sandbox Code Playgroud)
但这会导致NAs 被粘贴为字符而不仅仅是 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)
使用大量正则表达式和字符串拆分,显然效率低下且乏味乏味.但任何快速/简单的事情?