我能够删除两个数据帧df1和df2之间匹配的行,其中一些代码由@Eric Fail提供:
df1[!(apply(df1[1:2], 1, toString) %in% apply(df2[1:2], 1, toString)), ]
或dplyr@steveb 的解决方案
df1 %>% filter( ! ((date == df2$date) & (ticker == df2$ticker)) )
但是,我意识到我不仅需要删除这样的共享行:
df1 <- data.frame(ticker = c("MSFT", "MSFT", "MSFT", "MSFT"),
date = c("2016-01-01", "2016-01-02", "2016-01-03", "2016-01-04"), stringsAsFactors=F)
df1
ticker date
1 MSFT 2016-01-01
2 MSFT 2016-01-02
3 MSFT 2016-01-03
4 MSFT 2016-01-04
df2 <- data.frame(ticker = c("AAPL", "GOOG", "MSFT", "FB"),
date = c("2016-01-01", "2016-01-01", "2016-01-02", "2016-01-03"), stringsAsFactors=F)
df2
ticker date
1 AAPL 2016-01-01
2 GOOG …Run Code Online (Sandbox Code Playgroud) 例如,如果我的数据框是:
exampledf <- data.frame(column = c("exampletext1", "exampletext2", "exmapletext3"))
Run Code Online (Sandbox Code Playgroud)
我希望第一页有“exampletext1”,第二页有“exampletext2”,等等。
\pagebreak作品:
```{r, echo=FALSE}; exampledf[1,]```
\pagebreak
```{r, echo=FALSE} exampledf[2,]```
Run Code Online (Sandbox Code Playgroud)
但我的数据框太大,无法实用。
我真的需要遍历我的所有价值观:
for(i in 1:NROW(exampledf)) {
single <- exampledf[i]
strwrap(single, 70))
}
Run Code Online (Sandbox Code Playgroud)
我意识到这是一个奇怪的问题。
我想转换:
library(data.table)
market.cap <- data.table(cap=c("1B", "10M", "2M"))
cap
1 1B
2 10M
3 2M
Run Code Online (Sandbox Code Playgroud)
至:
cap
1 1000000000
2 10000000
3 2000000
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案.它有效,但涉及添加一个列,我知道这不是必需的.什么是更好的方式?
market.cap[, cap1 := cap]
market.cap$cap = sapply(market.cap$cap, function(x) (as.numeric(temp <- gsub("B", "", x)) * 1000000000))
market.cap$cap1 = sapply(market.cap$cap1, function(x) (as.numeric(temp <- gsub("M", "", x)) * 1000000))
M = data.frame(x = na.omit(market.cap$cap))
B = data.frame(x = na.omit(market.cap$cap1))
rbind(M,B)
Run Code Online (Sandbox Code Playgroud)