我正在处理一个简单的问题在R (但我还没想到它; p):
给出一个向量vect1 <- c("Andy+Pete", "Mary + Pete", "Pete+ Amada", ..., "Amada + Steven", "Steven + Henry")
。我想创建一个新的向量vect2
,其中包含vect1
和共享以下属性的新元素中的所有元素:每两个字符串"A+B"
和{ {1}},我们将其连接到"B+C"
并将此新元素添加到"A+C"
中。有人可以帮我这么做吗?
另外,我想在每个字符串中的vect2
前面加上所有元素,以下代码是否正确?
+
第3个问题:如果我的数据框for (i in length(vect1)){
vect3[i] <- regexpr(".*+", vect1[i])
}
的{{1}}列格式为d
(例如,Date
),我该如何订购此数据框?基于%d-%b
??的递增顺序我们只是说01-Apr
01-Apr Date
01-Mar d <- c(
02-Jan ,
3月31日,
30-May {{1} }}
答案 0 :(得分:1)
我认为应该这样做,但我做了我可能不应该做的事情......比如增长对象和嵌套foreach($tuitionAndFees as $tuitionAndFee){
echo $tuitionAndFee->revenue
}
循环。如果您想访问&#39; +&#39;前面的所有元素,只需使用for
。
name.matrix[,1]
更新
第三个问题。那么六月份只有30天。所以你要在那里获得NA。如果它是您尝试根据日期排序的数据框架,则您需要使用格式vect1 <- c("Andy+Pete", "Mary + Pete", "Pete+ Amada","Amada + Steven", "Steven + Henry")
library(stringr)
name.matrix <- matrix(do.call('rbind',str_split(vect1, pattern = "\\s?[+]\\s?")), ncol = 2)
new.stuff <- c()
for(x in unique(name.matrix[,2])){
sub.mat.1 <- matrix(name.matrix[name.matrix[,2] == x,], ncol = 2)
sub.mat.2 <- matrix(name.matrix[name.matrix[,1] == x,], ncol = 2)
if(length(sub.mat.1) && length(sub.mat.2)){
for(y in seq_along(sub.mat.1[,2])){
new.add <- paste0(sub.mat.1[y,1],'+', sub.mat.2[,2])
new.stuff <- c(new.stuff, new.add)
}
}
}
vect2 <- c(vect1, new.stuff)
vect2
#[1] "Andy+Pete" "Mary + Pete" "Pete+ Amada" "Amada + Steven" "Steven + Henry" "Andy+Amada"
#[7] "Mary+Amada" "Pete+Steven" "Amada+Henry"
。使用日期时,df[order(df$Date),]
包也可能会有所帮助。
lubridate
答案 1 :(得分:1)
我认为如果不需要,你可以(应该)避免使用for
循环和使用外部库。
所以这可能是一个解决方案:
// create data
vect1 <- c("Andy+Pete", "Mary + Pete", "Pete+ Amada", "Amada + Steven", "Steven + Henry")
// create a matrix of pairs with removed white spaces
pairsMatrix <- do.call(rbind, sapply(vect1, function(v) strsplit(gsub(pattern = " ", replacement = "", x = v), "\\+")))
// remove dimnames (not necessary though)
dimnames(pairsMatrix) <- NULL
// for all line of the pairsMatrix, find if second element is somewhere else first element. Bind that with the previous pairs
allPairs <- do.call(rbind, c(list(pairsMatrix), apply(pairsMatrix, 1, function(names) c(names[1], pairsMatrix[names[2]==pairsMatrix[,1], 2]))))
// filter for oneself-relationships
allPairs[allPairs[,1]!=allPairs[,2],]
[,1] [,2]
[1,] "Andy" "Pete"
[2,] "Mary" "Pete"
[3,] "Pete" "Amada"
[4,] "Amada" "Steven"
[5,] "Steven" "Henry"
[6,] "Andy" "Amada"
[7,] "Mary" "Amada"
[8,] "Pete" "Steven"
[9,] "Amada" "Henry"
关于你的最后一点,我认为使用正确的Date
对象进行简单排序就可以了。