希望有人可以帮助我一招。我在网上找到了类似的问题,但我见过的所有例子都没有完全符合我的要求,也没有在我的数据结构上工作。
我需要沿数据子集从数据框中删除NA,并将剩余的NA值压缩为每个数据子集的行。
示例:
readData
经验法则: 1)需要从每列中删除NA值 2)沿数据子集循环(上例中的“a”列) 3)每个子集的所有列最多具有1个非NA值,但某些列可能具有所有NA值
想法:
任何帮助都赞赏将最终作品放在一起!谢谢!
答案 0 :(得分:1)
使用dplyr::summarise_all
可以实现一个解决方案。 group_by
上的数据必须为a
。
library(dplyr)
dat %>%
group_by(a) %>%
summarise_all(funs(.[which.min(is.na(.))]))
# # A tibble: 2 x 4
# a b c d
# <fctr> <fctr> <fctr> <fctr>
# 1 1 B A 1
# 2 2 C A <NA>
答案 1 :(得分:1)
不确定这是否是您正在寻找的,但这可能对您有用。它至少会复制您正在寻找的小样本输出:
library(dplyr)
library(tidyr)
dat %>%
filter_at(vars(b:c), any_vars(!is.na(.))) %>%
group_by(a) %>%
fill(b) %>%
fill(c) %>%
filter_at(vars(b:c), all_vars(!is.na(.)))
# A tibble: 2 x 4
# Groups: a [2]
a b c d
<fctr> <fctr> <fctr> <fctr>
1 1 B A 1
2 2 C A NA
您也可以只使用dplyr
:
dat %>%
group_by(a) %>%
summarise_each(funs(first(.[!is.na(.)])))
答案 2 :(得分:1)
na.omit
和library(data.table)
merge(setDT(dat)[,a[1],keyby=a], setDT(dat)[,na.omit(.SD),keyby=a],all.x=TRUE)
from bs4 import BeautifulSoup
import urllib2
import shutil
import requests
from urlparse import urljoin
import time
def make_soup(url):
req = urllib2.Request(url, headers={'User-Agent': "Magic Browser"})
html = urllib2.urlopen(req)
return BeautifulSoup(html, 'html.parser')
def get_images(url):
soup = make_soup(url)
images = [img for img in soup.findAll('img')]
print (str(len(images)) + " images found.")
print 'Downloading images to current working directory.'
image_links = [each.get('src') for each in images]
for each in image_links:
try:
filename = each.strip().split('/')[-1].strip()
src = urljoin(url, each)
print 'Getting: ' + filename
response = requests.get(src, stream=True)
# delay to avoid corrupted previews
time.sleep(1)
with open(filename, 'wb') as out_file:
shutil.copyfileobj(response.raw, out_file)
except:
print ' An error occurred. Continuing.'
print 'Done.'
def main():
url = HIDDEN ADDRESS
get_images(url)
if __name__ == '__main__':
main()
我认为合并声明可以改进